介绍

  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