Laravel Scheduler是否在重复出错后停止执行?

时间:2018-03-08 17:04:28

标签: laravel cron scheduled-tasks

在我的Laravel调度程序中,我有许多行,如下所示

 $schedule->command('commandname01')->everyMinute();
 $schedule->command('commandname02')->everyMinute();
 $schedule->command('commandname03')->everyMinute();     

我注意到一些命令,例如commandname02不再运行 但是commandname01和commandname03正在运行。

如何恢复完整的命令执行?

注意:如果我登录我的容器并运行

php artisan commandname02

它会正常工作。

嫌犯:

  • 如果Laravel调度程序在出错时反复执行,是否有可能停止执行其中一个命令?
  • 如果commandname01花费的时间太长,是否可能会在同一分钟执行时跳过commandname02?

还有其他想法吗?

1 个答案:

答案 0 :(得分:0)

“如果commandname01花了太长时间,可能会在同一分钟执行时跳过commandname02吗?”

是的,原因是命令不是并行执行的( 多线程在PHP 中本身不可用),而是在调度程序中顺序执行

因此,如果commandname01对exec执行的操作超过60“。commandname02会在同一分钟内跳过执行。

资源:Laravel : Task Scheduling [ In Parallel ]

解决方案我采用并推荐,如上面的链接所示,它是在crontab上实现并行任务利用。

启动批次并行运行,如:

 * * * * * php /var/www/artisan batch01   >> /var/log/laravel-scheduler.log

 * * * * * php /var/www/artisan batch02   >> /var/log/laravel-scheduler.log

在batchNN命令中只需调用可以顺序运行的命令