Laravel队列只运行一个作业


Laravel queue only run one job

在我的表"jobs"有5个作业,我在localhost上使用了进程"php-artisan queue:listen",然后它运行了所有作业并完成了。但当我在服务器上使用这个过程时,它只运行了一次作业(相同的"php-artisan队列:工作")。我使用queue_driver是"数据库"。

更新-Laravel 5.5+

只需使用:

php artisan queue:work --once

TL;DR

php artisan queue:work=运行一个排队作业并停止

php artisan queue:listen=运行所有排队作业并侦听更多作业,直到停止

更多详细信息:

你是如何运行命令的?你只是打开一个终端并运行它,还是有一个cron作业要每隔一段时间运行?

如果您只是打开一个终端,运行php artisan queue:work将完成队列中的一项任务,然后停止,而如果您运行php artisan queue:listen,它将处理队列中的所有作业,并继续侦听任何其他作业,直到停止。

进一步阅读有关queue:work:的文档

启动队列侦听器

Laravel包括一个Artisan命令,该命令将按原样运行新作业被推到队列中。您可以使用以下队列运行侦听器:listen命令:

php artisan queue:listen

处理队列中的第一个作业

要只处理队列上的第一个作业,可以使用queue:work命令:

php artisan queue:work

你应该做什么

我猜您理想情况下想在服务器上做的是设置一个cron作业,使其每隔一段时间连续运行,并让它运行queue:work。更好的做法是,熟悉文档,然后再做决定。

请参阅此处回答的类似问题:queue:work-daemon和queue:listen

之间有什么区别