在Laravel,我在我的代码中运行这样的工作
Artisan::queue('mediaserver:process-queue', ['index' => $indexName]);
计划在每小时在后台运行相同的作业。有时候我想通过我的UI(通过代码)来触发它来固定它们。我需要防止的是,该过程始终在后台运行时启动。
最好的工作方法是什么?
答案 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
保留。