防止在代码中调用的作业与在Laravel中在后台运行的作业重叠

时间:2016-07-21 17:54:32

标签: php laravel laravel-5 laravel-5.2 job-scheduling

在Laravel,我在我的代码中运行这样的工作

Artisan::queue('mediaserver:process-queue', ['index' => $indexName]);

计划在每小时在后台运行相同的作业。有时候我想通过我的UI(通过代码)来触发它来固定它们。我需要防止的是,该过程始终在后台运行时启动。

最好的工作方法是什么?

1 个答案:

答案 0 :(得分:2)

Laravel的任务调度程序按creating a temp file before the command runs, and destroying it after处理重叠的作业。

文件的名称基于cron计划表达式和命令名称。

The existence of this file cause subsequent attempts to run the same command to be skipped

我会做类似的事情。在mediaserver:process-queue任务的顶部,我会检查mediaserver__process_queue中是否存在名为storage/的临时文件。如果是,退出。如果它不创建它。任务结束时销毁它。

您只需要小心处理任务从未捕获的异常中意外退出的情况,即使任务不再运行,也会导致mediaserver__process_queue保留。