如何在服务器上保持Laravel队列系统运行
问题的原因是,使用
nohup php artisan queue:work --daemon &
命令只是一个临时解决方法,一旦服务器重启或者出现任何问题导致进程停止,就需要再次运行该命令。为了解决这个问题,可以使用Supervisord来实现长期解决方案。
解决方法是安装Supervisord。对于Ubuntu用户,可以使用
sudo apt-get install supervisor
命令进行安装。对于AWS-AMI或RedHat用户,可以按照我在这个问题中概述的一系列说明进行设置。
另外,某些情况下使用Supervisord后出现了问题,无法创建文件。但是,有人建议使用Supervisor作为解决方案,这是正确的方式。
,问题的原因是临时解决方法无法实现长期解决方案,解决方法是安装Supervisord,并且Supervisor是正确的方式。
问题出现的原因是需要保持Laravel队列系统在服务器上运行。解决方法是使用Linux的supervisor来管理进程。可以通过以下命令在Ubuntu上安装supervisor:
apt-get install supervisor
supervisor的配置文件位于/etc/supervisor/conf.d目录中。对于每个进程,应创建一个新的进程配置文件。使用以下配置,监听器将尝试每个作业3次。如果监听器失败或系统重新启动,Supervisor也会重新启动监听器。
更多的指导可以在这里找到:digitalocean.com/community/tutorials/…
值得注意的是,这个答案也是Laravel文档中推荐的做法:laravel.com/docs/5.6/queues#supervisor-configuration
在服务器上保持Laravel队列系统运行的方式
在服务器上运行以下命令:
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 >> storage/logs/laravel.log &
但你还应该使用类似Supervisord的工具,以确保服务保持运行,并在崩溃/故障后重新启动。
使用>>来追加到laravel.log。使用单个>将每次替换文件。
首先我需要:stackoverflow.com/a/29292637/470749然后nohup php artisan queue:work --daemon > storage/logs/laravel.log &
对我有效。注意:如果你想杀死nohup进程,你需要先运行类似于ps -ef |grep artisan
的命令查找其PID。然后你可以运行kill [pid]
stackoverflow.com/q/17385794/470749
这是一个糟糕的解决方案,因为一旦你执行了queue:reset命令,worker就会停止运行,而且你没有重启机制,只需使用supervisord,生成2个worker,当你有大量任务时就能正常工作。顺便说一下,每次你进行代码更改时都需要重新生成新的worker。
答案明确指出你应该使用类似Supervisord的工具,一直以来都是这样。
你听说过Linux screen吗?fg和bg呢?
如果你使用laravel forge,请确保运行:sudo su - forge
这样你的命令将作为forge用户运行。