Supervisor是用Python开发的一套通用的进程管理程序,将一个普通的命令行进程变为后台Daemon,并监控进程状态,异常退出时可以进行重启。
安装
pip install supervisor
yum -y install epel-release
yum install -y supervisor
# 查看版本
supervisord -v
相关配置
# supervisor配置文件[supervisor的配置文件默认是不全的,不过在大部分默认的情况下,基本功能已经满足]
/etc/supervisord.conf
# 子进程配置文件路径[默认子进程配置文件为ini格式,可在supervisor主配置文件中修改]
/etc/supervisord.d/
子进程配置
给需要管理的子进程(程序)编写一个配置文件,放在/etc/supervisor.d/
目录下,以.ini
作为扩展名(每个进程的配置文件都可以单独分拆也可以把相关的脚本放一起)。如任意定义一个和脚本相关的项目名称的选项组(/etc/supervisord.d/test.ini):
# [program:应用名称]
[program:queue]
# 命令路径,如果使用python启动的程序应该为python /home/test.py,不建议放入/home/user/, 对于非user用户一般情况下是不能访问
command=php /www/group/yii queue/listen
# 进程数量
numprocs=2
# 当numprocs为1时,process_name=%(program_name)s - 当numprocs>=2时,%(program_name)s_%(process_num)02d
process_name=%(program_name)s_%(process_num)02d
# 如果是true,当supervisor启动时,程序将会自动启动
autostart=true
# 自动重启
autorestart=true
# 启动延时执行,默认1秒
startsecs=10
# 启动尝试次数,默认3次
startretries=3
# 以root用户执行
user=root
# 日志路径
logfile=/tmp/queue.log
# 日志重定向,指定每个文件的大小/文件个数/日志位置
;redirect_stderr = true
;stdout_logfile_maxbytes = 50MB
;stdout_logfile_backups = 10
;stdout_logfile = /srv/awesome/log/app.log
Supervisor管理awesome项目案例
awesome是一个基于aiohttp构建的Web项目,其中app.py为启动入口。
[program:awesome]
command = python3 /srv/awesome/www/app.py
directory = /srv/awesome/www
process_name= %(program_name)s
user = root
startsecs = 3
redirect_stderr = true
stdout_logfile_maxbytes = 50MB
stdout_logfile_backups = 10
stdout_logfile = /srv/awesome/log/app.log
命令说明
# 查看所有进程状态
supervisorctl status
# 停止awesome
supervisorctl stop awesome
# 启动awesome
supervisorctl start awesome
# 重启awesome
supervisorctl restart awesome
# 配置更新后加载新配置
supervisorctl update awesome
# 重启配置中所有程序
supervisorctl reload
# 查看日志
supervisorctl tail -f awesome
使用supervisorctl前先启动supervisord,启动命令:/bin/supervisord -c /etc/supervisord.conf
或/usr/bin/python2 /usr/bin/supervisord -c /etc/supervisor/supervisord.conf
systemctl start supervisord.service //启动supervisor并加载默认配置文件
systemctl enable supervisord.service //将supervisor加入开机启动项