我有多个任务需要每隔一到两个小时完成一次。所有这些任务都是通过Laravel使用下面的命令作为cron作业来安排的
$schedule->command('email:notifications1')
->cron('15 * * * * *');
$schedule->command('email:notifications2')
->cron('15 * * * * *');
$schedule->command('email:notifications3')
->cron('15 * * * * *');
**问题:**以上所有任务都非常耗时,从结果来看,这些任务似乎不是并行运行的,而且每个任务都在前一个任务结束后运行。
要求我怎样才能并行运行它们?我希望所有任务在时钟滴答声响到指定时间后立即执行(并行)。
- 拉瑞维尔第5版 *
2条答案
按热度按时间xlpyo6sf1#
如果您将
runInBackground()
(Laravel 5.2中引入的)添加到链中,您可以轻松地运行多个并行命令。这会在后台创建一个新进程,这样调度程序就不必等待命令执行,甚至不会干扰
withoutOverlapping()
方法,因为它使用互斥文件。现在,您还可以从版本控制中获得命令的好处。
cuxqih212#
由于PHP的限制,Laravel调度程序一次只能运行一个命令。
但是,您可以直接在crontab文件中添加cronjob,这样,它们将在单独的进程中并行执行。
另一种解决方法是让任务在其他时间启动,因为cron任务每分钟都会启动一个新的php进程,所以这些任务不会互相影响。
例如: