Laravel - 自动执行排队的作业[重复]

Posted

技术标签:

【中文标题】Laravel - 自动执行排队的作业[重复]【英文标题】:Laravel - Execute queued job automatically [duplicate] 【发布时间】:2018-11-30 17:18:06 【问题描述】:

我有工作要发送几封电子邮件。

在我的控制器中,我称之为工作:

dispatch(new SendStartPatEmail($data));

记录保存在表作业中。

但要执行这项工作,我必须手动运行php artisan queued:work。 如何自动执行此操作?

【问题讨论】:

您可以通过将命令设置为在后台运行并且几乎永久地实现这一点,即使用户注销,工作仍将继续使用此命令运行:nohup php artisan queue:work --daemon & 如果要将输出记录到日志中,可以通过将上述命令修改为:nohup php artisan queue:work --daemon > /dev/null 2>&1 &跨度> 【参考方案1】:

有很多不同的方法,都取决于您使用的环境。 Laravel 倾向于推荐使用 Supervisor 来监控您的队列工作人员并保持他们运行。

或者,您可能希望立即执行您的作业,而不是将它们添加到队列中。您可以通过在配置中将队列驱动程序设置为 sync 来做到这一点:

config/queue.php

'default' => env('QUEUE_DRIVER', 'sync'),

或在您的 .env 文件中(假设您的配置设置如上)

.env

QUEUE_DRIVER=sync

【讨论】:

【参考方案2】:

已经回复here

是的,如果您使用 Linux,您可以使用例如 supervisor,它将 运行php artisan queue:listen(您需要将此命令添加到 主管配置文件),它将始终确保 命令正在运行。

【讨论】:

您可以考虑在 linux 系统的后台运行的一种简单方法是在 artisan 命令的末尾添加 & 符号。对于这种情况php artisan queue:work &【参考方案3】:

php artisan queue:work 是一个简单的命令,它监听队列并执行一些作业。

整个概念是什么?

您可以在后台运行这个简单的命令,队列中的所有作业都将被执行。 但在后台运行进程 (queue:work) 并不总是安全的。

为什么?因为进程总是有可能因为内存泄漏而终止或卡住。

在这种情况下,laravel 建议使用 Supervisor 。supervisor 是另一个像服务一样工作的进程。它负责检查php artisan queue:work 创建的进程是否正常工作或应该被重新启动。

这种方式php artisan queue:work在后台运行,但有一种机制(主管)可以在出现问题时重新启动进程

【讨论】:

【参考方案4】:

dispatch_now( ... ) 方法可以指定您希望同步运行的那些作业。

我不关心下划线,所以我通常会创建一个辅助方法dispatchNow( ... ) 来调用下划线版本.. ?

【讨论】:

以上是关于Laravel - 自动执行排队的作业[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 排队事件侦听器与作业之间的区别

如果从数据库中删除,Laravel 中的排队作业是不是会停止?

Laravel 尝试排队作业,触发新尝试的正确方法?

Laravel 排队的作业即使有延迟也会立即处理

如何使用 Laravel 5.1 在 IronMQ 中获取排队作业的数量?

PHP apcu 在 Laravel 排队/分派作业中不持久