在我的Laravel调度程序中,我有许多行,如下所示
$schedule->command('commandname01')->everyMinute();
$schedule->command('commandname02')->everyMinute();
$schedule->command('commandname03')->everyMinute();
我注意到一些命令,例如commandname02不再运行 但是commandname01和commandname03正在运行。
如何恢复完整的命令执行?
注意:如果我登录我的容器并运行
php artisan commandname02
它会正常工作。
嫌犯:
还有其他想法吗?
答案 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命令中只需调用可以顺序运行的命令