我想在我的项目中使用Laravel队列系统,并希望在服务器后台永久运行php artisan queue:work,我搜索了一些内容,发现有一个命令行可以即使从ssh终端退出后也可运行,但在某些情况下可能会崩溃,给我带来严重的问题。所以过了一段时间,我发现有一个名为Supervisord的软件包,可以在服务器重新启动后重新启动该命令。因此,我想请有经验的人从0到100逐步帮助我安装Supervisord并在CentOS 7上进行配置,然后设置队列命令行。非常感谢!
我想在我的项目中使用Laravel队列系统,并希望在服务器后台永久运行php artisan queue:work,我搜索了一些内容,发现有一个命令行可以即使从ssh终端退出后也可运行,但在某些情况下可能会崩溃,给我带来严重的问题。所以过了一段时间,我发现有一个名为Supervisord的软件包,可以在服务器重新启动后重新启动该命令。因此,我想请有经验的人从0到100逐步帮助我安装Supervisord并在CentOS 7上进行配置,然后设置队列命令行。非常感谢!
这里是如何在CentOS 7上安装和配置Supervisord以永久运行Laravel队列:
easy_install supervisor
yum install supervisor
vim /etc/supervisord.conf
编辑“program”部分如下:[program:laravel-worker]
command=php /path/to/app.com/artisan queue:work
process_name=%(program_name)s_%(process_num)02d
numprocs=8
priority=999
autostart=true
autorestart=true
startsecs=1
startretries=3
user=apache
redirect_stderr=true
stdout_logfile=/path/to/log/worker.log
systemctl enable supervisord
在启动时自动运行systemctl restart supervisord
重启服务希望这对有需要的人有所帮助,以下是我在 CentOS 7 上将 @Abdu 的答案整合后得到的步骤。
1. 安装 Supervisor
easy_install supervisor
* 如果没有安装,执行 yum install -y python-setuptools
然后再执行 easy_install supervisor
2. 预备工作
为了使理想的设置运行起来,你应该运行以下命令...
# create directory for supervisor logs
mkdir /var/log/supervisor
# create directory for supervisor configs
mkdir -p /etc/supervisor/conf.d
# create config directory for supervisor
cat <<EOT >> /etc/supervisor/supervisord.conf
; supervisor config file
[supervisord]
logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
childlogdir=/var/log/supervisor ; ('AUTO' child log dir, default $TEMP)
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL for a unix socket
[include]
files = /etc/supervisor/conf.d/*.conf
EOT
# create systemctl service script
cat <<EOT >> /lib/systemd/system/supervisord.service
[Unit]
Description=Supervisor process control system for UNIX
Documentation=http://supervisord.org
After=network.target
[Service]
ExecStart=/usr/bin/supervisord -n -c /etc/supervisor/supervisord.conf
ExecStop=/usr/bin/supervisorctl $OPTIONS shutdown
ExecReload=/usr/bin/supervisorctl -c /etc/supervisor/supervisord.conf $OPTIONS reload
KillMode=process
Restart=on-failure
RestartSec=50s
[Install]
WantedBy=multi-user.target
EOT
完成这些步骤后,现在您应该能够使用systemctl启动和停止supervisor。要启动systemctl,请运行systemctl start supervisord
。要查看supervisor的状态,请运行systemctl status supervisord
。
您可以在/etc/supervisor/conf.d
下创建任意数量的自定义配置。
3. 在系统启动时启用
您还应通过运行以下命令在启动时启用supervisord
systemctl enable supervisord
[unix_http_server]
file=/var/run/supervisor.sock ;(套接字文件的路径)
chmod=0700 ; 套接字文件模式(默认为0700)
- BuffKsystemctl
未运行,而使用chkserv
来监视和重启进程,所以这里的两个答案对我来说并没有完全起作用。easy_install supervisor
的错误,因为它试图安装新的4.x.x版本,该版本需要Python > 2.6
,而2.6恰好是在我的机器上运行的Python版本。yum install -y python-setuptools
easy_install supervisor==3.4.0
nano /etc/supervisord.conf
并添加
[supervisord]
nodaemon=true
[include]
files = /etc/supervisor/conf.d/*.conf
[program:laravel-worker]
command=php artisan queue:work --tries=1
autostart=true
autorestart=true
stderr_logfile=/var/log/queue.err.log
stdout_logfile=/var/log/queue.out.log
输入nano /etc/chkserv.d/chkservd.conf
命令,添加一行supervisord:1
,然后保存文件。
使用touch /etc/chkserv.d/supervisord
命令创建chkservd配置文件。
输入nano /etc/chkserv.d/supervisord
命令,添加一行service[supervisord]=x,x,x,service supervisord restart,supervisord,root
,然后保存文件。
supervisord
现在将显示在WHM的Service Manager
下,并且chkservd
将启动它并确保它保持运行状态。如果要手动启动它,只需运行supervisord
。
有关向chkservd
添加服务的更多信息,请点击此处。
easy_install
,但是在我的情况下,我的新的CentOS并没有。要获取它:yum install -y python-setuptools
,然后你就可以继续操作(除非你是root,否则所有命令都要在前面加上sudo
)。这样做不起作用:yum install supervisor
:因为它已经通过easy_install
安装了。 - firepol.conf
文件中拥有多个脚本/程序,该怎么办呢? - TheRealChx101yum install epel-release
。Supervisor 在默认的 CentOS 7 软件仓库中不可用。 - A. Khaled