介绍
Supervisor 是一款基于 Python 的进程管理(守护)工具,经过配置后的 Supervisor 会让被守护的程序进程以子进程的方式运行在后台并监控着,一旦发现程序异常终止便自动重启,这样就可以保证被守护的程序 Always Uptime。
安装
从 EPEL 源里安装
yum install -y epel-release
yum install -y supervisor
配置
在配置文件 vi /etc/supervisord.conf
尾部添加内容:
[program:<程序名称>]
command=<执行指令>
配置说明
[program:<程序名称>]
command=<执行指令> ; (必填项)程序执行指令
;priority=999 ; (非必填;缺省值 999)程序在启动和关闭顺序中的相对优先级(数值越小优先级越高。低数值表示在启动时优先启动并最后关闭;高数值表示程序最后启动,然后首先关闭。)
;autostart=true ; (非必填;缺省值 true)随 supervisord 启动时启动
;autorestart=true ; (非必填;缺省值 unexpected)程序退出后自动重启(可选值 true/unexpected/false;true=无条件自动重启;unexpected=程序退出与预设退出代码不符时自动重启;false=不自动重启。)
;startsecs=10 ; (非必填;缺省值 10)在程序启动后持续运行多久才能视作启动成功的总秒数(如果程序启动后在少于此设置的时间内退出,即便退出时与预设退出代码相符,也会被视作程序启动失败。)
;startretries=3 ; (非必填;缺省值 3)程序启动失败后尝试自动重启的最大次数
;exitcodes=0,2 ; (非必填;缺省值 0,2)预设退出代码(autorestart=unexpected 时生效;程序以 supervisord 主动请求以外的其他任何方式退出,并且退出时与预设退出代码不符将自动重启。)
;stopsignal=QUIT ; (非必填;缺省值 TERM)程序被要求终止时的信号(可选值 TERM/HUP/INT/QUIT/KILL/USR1/USR2)
;stopwaitsecs=10 ; (非必填;缺省值 10)在程序已发送停止信号后,等待操作系统将 SIGCHLD 反馈给 supervisord 的最大秒数。如果 supervisord 在此设置秒数内接收到程序发出的 SIGCHLD,supervisord 将尝试使用 SIGKILL 结束程序。
;user=chrism ; (非必填)指定此系统用户运行程序(前提是以 root 身份运行 supervisord)
;log_stdout=true ; (非必填;缺省值 true)记录 stdout 日志
;log_stderr=true ; (非必填;缺省值 false)记录 stderr 日志
;logfile=/var/log/cat.log ; (非必填;缺省值 AUTO)程序日志存储路径(可选值 AUTO/none;此日志视角为 supervisord,并非指程序自身日志。)
;logfile_maxbytes=1MB ; (非必填;缺省值 50MB)单个日志文件最大体积
;logfile_backups=10 ; (非必填;缺省值 10)保留日志文件的数量
以程序 Murmur 为例
运行指令为
/usr/local/murmur/murmur.x86 -fg -ini /etc/murmur.ini
打开配置文件 vi /etc/supervisord.conf
并在末尾添加如下内容
[program:murmur]
command=/usr/local/murmur/murmur.x86 -fg -ini /etc/murmur.ini
Debian:
[program:murmur]
command=/usr/sbin/murmurd -fg -ini /etc/mumble-server.ini
运行
启动 Supervisor 服务
service supervisord start
ps aux
可以看到 supervisord 与 murmur 已经都在运行了。
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1518 0.0 1.9 198080 9888 ? Ss 04:18 0:00 /usr/bin/python /usr/bin/supervisord
murmur 1520 1.2 2.7 78380 13824 ? Sl 04:18 0:00 /usr/local/murmur/murmur.x86 -fg -ini /etc/murmur.ini
设置开机自启 chkconfig supervisord on
进程管理
使用 supervisorctl 子进程管理工具
supervisorctl status // 查看进程的状态
supervisorctl stop murmur // 终止 murmur 进程
supervisorctl start murmur // 启动 murmur 进程
supervisorctl restart murmur // 重启 murmur 进程
supervisorctl update // 重新加载配置
supervisorctl reload // 重启所有进程
范例:
crontab -e
0 6 1 * * /usr/bin/supervisorctl restart murmur > /dev/null
service crond restart
其他
Supervisor Official > Docs > Configuration File
版权声明:本文为原创文章,版权归 BenhoN 所有。
本文链接:https://blog.benhon.net/archives/supervisor.html
所有原创文章采用知识共享 署名-非商业性使用 4.0 国际 许可协议进行许可,你可以自由地转载和修改,但请务必注明文章来源并且不可用于商业目的。