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 中的排队作业是不是会停止?