Laravel 队列只运行一项工作

Posted

技术标签:

【中文标题】Laravel 队列只运行一项工作【英文标题】:Laravel queue only run one job 【发布时间】:2016-09-09 11:46:27 【问题描述】:

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

【问题讨论】:

发布您当前的代码。 【参考方案1】:

更新 - Laravel 5.5+

只需使用:

php artisan queue:work --once

【讨论】:

【参考方案2】:

TL;DR

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

php artisan queue:listen = 运行所有排队的作业并继续监听直到停止

更多细节:

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

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

Read further in the docs regarding queue:work:

启动队列监听器

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

php artisan queue:listen

处理队列中的第一个作业

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

php artisan queue:work

你应该做什么?

我猜你理想地想要在你的服务器上做的是设置一个 cron 作业以间隔连续运行并让它运行queue:work。更好的是,先熟悉文档,然后再做决定。

请参阅此处回答的类似问题:What is the difference between queue:work --daemon and queue:listen

【讨论】:

嗨@haakym,我使用了命令“php artisan queue:work --daemon”并成功了,这个命令运行我队列中的所有作业。非常感谢。 @dungdq 不客气,很高兴你成功了!如果我给出的答案解决了您的问题,您可以通过按我的答案旁边的勾号将其标记为正确,或者如果它有帮助,您可以投票。谢谢。 Xampp : php artisan queue:listen 不听即将到来的工作。只是运行已经添加并停止。 文档说不然:laravel.com/docs/5.5/queues#running-the-queue-worker 你最好提出自己的问题并解释你正在尝试的整个过程以及会发生什么以及你期望发生什么 queue:listen 正在处理一个队列项目,但我在数据库中有 20 个队列项目,而且还有更多正在堆积。要清除队列项目,我需要一次又一次地运行queue:listen,每次只清除一个。 @haakym

以上是关于Laravel 队列只运行一项工作的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 队列:在主机中永远运行的工作?

使用 Supervisor 运行多个 Laravel 队列工作者

Docker + Laravel 队列:工作

退出终端时运行laravel队列侦听

Laravel Lumen 队列失败与队列:工作但不是队列:听

laravel队列