Supervisor — 守护进程工具管理 Laravel 队列进程
前言
Supervisor 在百度百科上给的定义是超级用户,监管员。Supervisor 是一个进程管理工具,当进程中断的时候 Supervisor 能自动重新启动它。可以运行在各种类 unix 的机器上,Supervisor 就是用 Python 开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台 daemon,并监控进程状态,异常退出时能自动重启
安装 Supervisor
由于其基于 Python 开发,任何环境都可以通过 pip 安装
sudo pip install supervisor
Ubuntu 系统可用如下方式安装:
sudo apt-get install supervisor
MacOSX 系统可通过如下方式安装:
brew install supervisor
CentOS 系统可用如下方式安装:
yum install -y supervisor
安装完成后会有如下几个命令工具
- supervisord,Supervisor 的守护进程启动命令,运行时会启动一个守护进程,其负责管理的子进程,且可在所管理的进程出现崩溃时自动重启
- supervisorctl,用户与 Supervisor 交互的工具,方便用户管理子进程,可用来 stop、start、restart
echo_supervisord_conf
,输出默认配置
安装完成后可以用 echo_supervisord_conf
命令测试是否安装成功。
配置 Supervisor
- 在etc目录下会存在一个
supervisord.conf
文件,如果没有此文件,则手动创建,执行:
echo_supervisord_conf > /etc/supervisord.conf
- 创建一个存放配置的文件夹目录,执行:
mkdir /etc/supervisor/
进入创建的文件夹目录, 执行
touch laravel-worker.conf
执行完后会创建一个
laravel-worker.conf
文件,编辑此文件,输入配置信息。配置文件如下:
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /www/wwwroot/code/laravel_blog/artisan queue:work --tries=3
autostart=true
autorestart=true
user=root
numprocs=8
redirect_stderr=true
stdout_logfile=/var/log/supervisor/laravel-queue.log
- 保存配置文件后,修改
supervisord.conf
文件,拉到文件最下面,将引入路径,修改为新增的
修改如下:
[include]
files = /etc/supervisor/laravel-worker.conf
启动 Supervisor
执行
supervisord -c /etc/supervisord.conf
如果提示线程已启动,则使用 ps -ef
命令,查看 PID
,使用 kill
,结束任务。
- 执行监听任务,保持队列运行
按顺序执行以下命令:
sudo supervisorctl reread --重新启动配置中的所有程序
sudo supervisorctl update --更新新的配置到supervisord
sudo supervisorctl start laravel-worker:* --启动某个进程(program_name=你配置中写的程序名称)
注意:如果提示
laravel-worker: ERROR (no such group)
错误,有可能是引入文件配置的路径错了,检查路径/etc/supervisor/laravel-worker.conf
是否正确;还有laravel-worker.conf
文件中的user
是否是管理员账号user=root
- 查看 Supervisor 任务执行状态
执行
supervisorctl status
查看执行状态。
添加开机启动服务
如果用 pip
或者 easy_instal
安装 supervisor
,则不会默认将其添加到系统开机启动服务中。但这项工作可以自己来做,如果在 Ubuntu
系统下工作,用 apt
工具来安装则一切工作都会做好
要添加系统服务首先需要在 /etc/init.d/
中创建服务脚本,记得为脚本添加可执行权限 chmod a+x /etc/init.d/superviser
,然后为将 supervisor
添加到系统服务中:
update-rc.d supervisor defaults
MacOSX
中使用 brew
,则可以使用 brew service
来添加开机启动:
brew services start supervisor
Centos 中使用 systemctl 来添加开机启动:
systemctl enable supervisord