gpt4 book ai didi

laravel - 如何保持 Laravel 队列系统在服务器上运行

转载 作者:行者123 更新时间:2023-12-03 06:01:18 24 4
gpt4 key购买 nike

我最近设置了一个 Laravel 队列系统。基本原理是 cronjob 调用一个将作业添加到队列的命令,并调用第二个发送电子邮件的命令。

当我 ssh 进入我的服务器并运行 php artisan queue:listen 时,系统可以工作,但是如果我关闭终端,监听器就会关闭,作业会堆积起来并坐在队列中,直到我 ssh 回来并再次运行监听。

保持队列系统在后台运行而不需要通过 ssh 保持连接打开的最佳方法是什么?

我尝试运行 php artisan queue:work --daemon ,它完成了队列中的作业,但是当我关闭终端时,它关闭了连接和后台进程。

最佳答案

正在运行

nohup php artisan queue:work --daemon &

将阻止命令在您注销时退出。

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

参见nohup

nohup - run a command immune to hangups, with output to a non-tty

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

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

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

但是您还应该使用类似 Supervisord 的内容确保服务保持运行并在崩溃/失败后重新启动。

使用>>追加到laravel.log。使用单个 > 将每次替换该文件。

关于laravel - 如何保持 Laravel 队列系统在服务器上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28623001/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com