Supervisor 进程管理程序

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

设置开机启动

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 说明运行正常

蔡关荣博客
请先登录后发表评论
  • latest comments
  • 总共0条评论