我将如何在后台运行 Laravel 5.2 的队列监听器?

Posted

技术标签:

【中文标题】我将如何在后台运行 Laravel 5.2 的队列监听器?【英文标题】:How will I run queue listener of Laravel 5.2 in background? 【发布时间】:2016-12-31 02:55:22 【问题描述】:

在我的项目中,我正在使用数据库队列并使用命令执行此队列

php artisan queue:listen

在作曲家中,它正在工作。但是在我的 Windows 服务器中,有很多项目使用队列,所以打开了很多 Composer 的窗口。这很不方便。这是否可以在不打开作曲家窗口的情况下在后台运行此命令?

【问题讨论】:

您可以创建一个脚本来运行这些命令。并使用 cron 运行此脚本 这能回答你的问题吗? How to keep Laravel Queue system running on server 【参考方案1】:

您可以使用该命令,但它只能在您注销或重新启动后才能使用

nohup php artisan queue:work --daemon &

尾随的和号 (&) 导致进程在后台启动,因此您可以继续使用 shell 而不必等到脚本完成。

见nohup

nohup - 运行不受挂断影响的命令,输出到非 tty

这会将信息输出到您运行命令的目录中名为 nohup.out 的文件中。如果您对输出不感兴趣,您可以将 stdout 和 stderr 重定向到 /dev/null,或者类似地您可以将其输出到您的普通 laravel 日志中。例如

nohup php artisan queue:work --daemon > /dev/null 2>&1 &

nohup php artisan queue:work --daemon > app/storage/logs/laravel.log &

但您还应该使用Supervisord 之类的东西来确保服务保持运行并在崩溃/失败后重新启动。

运行队列:用 supervisord 监听

supervisord 是一个 *nix 实用程序,用于监视和控制以下进程,它是 /etc/supervisord.conf 的一部分,运行良好。

用于 queue:listen 的 supervisord.conf 部分

[program:l5beauty-queue-listen]
command=php /PATH/TO/l5beauty/artisan queue:listen
user=NONROOT-USER
process_name=%(program_name)s_%(process_num)d
directory=/PATH/TO/l5beauty
stdout_logfile=/PATH/TO/l5beauty/storage/logs/supervisord.log
redirect_stderr=true
numprocs=1

您需要替换 /PATH/TO/ 以匹配您的本地安装。同样,用户设置对于您的安装也是唯一的。

【讨论】:

感谢您的回复。我正在使用 Windows 服务器。如何在 windows server 上使用上述命令? 从这里复制和粘贴好:***.com/questions/28623001/… 查看文档。

以上是关于我将如何在后台运行 Laravel 5.2 的队列监听器?的主要内容,如果未能解决你的问题,请参考以下文章

如何在后台 laravel 中运行推送通知循环?

Laravel 队列不作为后台运行

如何使用 5.2 版本在本地运行 laravel 项目

Laravel 队列和 Azure WebJob

如何将此集合转换为 Laravel 5.2 中的数组

如何将 Laravel 队列工作限制为一个执行结束出口?