Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。它是通过fork/exec的方式把这些被管理的进程当作supervisor的子进程来启动,这样只要在supervisor的配置文件中,把要管理的进程的可执行文件的路径写进去即可。也实现当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,可以选择是否自己启动和报警。supervisor还提供了一个功能,可以为supervisord或者每个子进程,设置一个非root的user,这个user就可以管理它对应的进程
注:本文以centos 7.5 为例,supervisor 版本3.4.0。
目前我在项目中的使用场景是 think-queue 队列的监听,关于think-queue 的使用:传送门
Supervisor 使用很简单,下面是一个配置示例:
[program:system_msg_queue]
command=php think queue:work --queue system_msg_queue
directory= /data/your project path/
process_name=%(process_num)02d
numprocs=5
autostart=true
autorestart=true
startsecs=1
startretries=20
redirect_stderr=true
user=vagrant
stdout_logfile=/data/supervisor-log/supervisord.out.log
stderr_logfile=/data/supervisor-log/supervisord.err.log
其他配置参考官方文档:http://www.supervisord.org/configuration.html#program-x-section-example
安装:
第一种:yum 或 apt 方式安装
#yum
sudo yum info supoervisor # 查看安装源中的版本
sudo yum install -y supervisor # 安装
#apt
sudo apt-cache show supervisor # 查看安装源中的版本
sudo apt-get install supervisor # 安装
安装完成后会添加几个系统命令 supervisord supervisorctl echo_supervisord_conf
默认的配置都已经生成,其中supervisord.conf是supervisord的配置文件,文件路径为:`/etc/supervisord.conf`
编辑配置文件
vim /etc/supervisord.conf
找到最后一行,这里我将配置文件放在 /etc/supervisord.d 目录下
;[include]
files = supervisord.d/*.ini
files= /etc/supervisord.d/*.conf # 定义配置文件目录,这里我讲.ini 改为.conf
第二种:使用pip 安装,pip 是一个Python 包安装和管理工具
先看看是否安装了pip pip --version
如果提示命令不存在 sudo: pip: command not found
,则可以使用以下方法来安装:
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py # 下载安装脚本
sudo python get-pip.py # 运行安装脚本
安装完成再次运行 pip --version
如下输出就安装成功了
[root@VM-142-222-centos supervisord.d]# pip --version
pip 20.1.1 from /usr/lib/python2.7/site-packages/pip (python 2.7)
接下来安装supervisor
sudo pip install supervisor
![](uploads/article/20200719/zszLwfW0wjEirjXlW6NWMmcZb8n8thJ4gw43Xwjk.png)
设置开机启动
im /etc/rc.local
# 在最后一行添加
/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
新建配置文件
# 配置文件内容
[program:自定义名称]
command=php think queue:work --queue register_handle --daemon --tries 10 #要执行的命令
directory= /www/wwwroot/admin.xxx.com #执行目录
process_name=%(process_num)02d #进程名称
numprocs=5
autostart=true #代表这个进程跟随 Supervisor,只要 Supervisor 启动了,就启动这个进程;
autorestart=true #代表要求 Supervisor 监听进程状态,假如异常退出就再次启动;
startsecs=1
startretries=20
redirect_stderr=true
user=www #代表以 www 身份启动进程
stdout_logfile= /www/wwwroot/admin.xxx.com/test.out.log #代表将进程的输出保存到日志文件中。
stderr_logfile=/www/wwwroot/admin.xxx.com/test.err.log #代表将进程的错误输出保存到日志文件中。
supervisor 启动、停止、重启 、状态查看命令
service supervisord start #启动服务
service supervisord stop #终止服务
service supervisord restart #重启服务
supervisorctl status #检查是否正常运行 状态是 RUNNING 说明运行正常
评论区