Laravel -仅在相同的前一个任务完成时运行计划任务


Laravel - Run scheduled task only if same previous task has finished

我想知道Laravel是否有一个内置的功能,只有在前一个任务完成时才运行计划任务。

我需要每隔几秒钟运行一个特定的任务,但是这个任务依赖于查询另一个可能在某个时刻失去连接的主机。

如果没有的话,我想有几种方法可以做到这一点:

  1. 让任务刚刚将作业放入队列
  2. 保存一个标志(作为文件或数据库),在任务开始时设置,在完成时取消设置。

只是希望任务调度程序有内置的东西在我走这两条路之前…

在文档中找到了答案:D

https://laravel.com/docs/5.3/scheduling

摘录:

防止任务重叠

默认情况下,即使任务的前一个实例仍在运行,计划任务也将运行。为了防止这种情况,您可以使用withoutoverlap方法:

$schedule->command('emails:send')->withoutOverlapping();

在本例中,如果emails:send Artisan命令尚未运行,则该命令将每分钟运行一次。如果您的任务在执行时间上变化很大,那么withoutOverlapping方法特别有用,这可以防止您准确预测给定任务将花费多长时间。