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

11 浏览
0 Comments

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

我最近设置了一个Laravel队列系统。基本原理是一个cronjob调用一个命令将任务添加到队列中,并调用第二个命令发送电子邮件。\n当我通过ssh进入服务器并运行php artisan queue:listen时,系统可以正常工作。但是,如果我关闭终端,监听器将关闭,任务会堆积在队列中,直到我再次通过ssh登录并运行监听命令。\n有什么方法可以让我的队列系统在后台运行,而无需通过ssh保持连接开启?\n我尝试运行php artisan queue:work --daemon,它可以完成队列中的任务,但当我关闭终端时,连接和后台进程也关闭了。

0
0 Comments

问题的原因是,使用

nohup php artisan queue:work --daemon &

命令只是一个临时解决方法,一旦服务器重启或者出现任何问题导致进程停止,就需要再次运行该命令。为了解决这个问题,可以使用Supervisord来实现长期解决方案。

解决方法是安装Supervisord。对于Ubuntu用户,可以使用

sudo apt-get install supervisor

命令进行安装。对于AWS-AMI或RedHat用户,可以按照我在这个问题中概述的一系列说明进行设置。

另外,某些情况下使用Supervisord后出现了问题,无法创建文件。但是,有人建议使用Supervisor作为解决方案,这是正确的方式。

,问题的原因是临时解决方法无法实现长期解决方案,解决方法是安装Supervisord,并且Supervisor是正确的方式。

0
0 Comments

问题出现的原因是需要保持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

0
0 Comments

在服务器上保持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用户运行。

0