前言

supervisord 是用 Python 开发的一个进程管理工具

安装

直接使用 pip 直接安装

1
pip install supervisor

使用 apt-get 安装

1
apt-get install supervisor

配置文件

supervisor 也有一个配置文件优先路径,$CWD/supervisord.conf > $CWD/etc/supervisord.conf > /etc/supervisord.conf

一般会创建一个 /etc/supervisord.conf,然后创建一个/etc/supervisor/SomeService.conf, 然后在/etc/supervisord.conf 中包含后者

生成配置文件

1
echo_supervisord_conf > /etc/supervisord.conf

最后一行添加配置,方便管理自定义进程

1
2
[include]
files = /etc/supervisor/*.conf

创建自定义脚本文件

1
2
3
4
5
6
7
8
9
10
11
12
[program:expressbot]
directory = /home/ExpressBot/expressbot/main.py
command = /usr/bin/python /home/ExpressBot/expressbot/main.py
autostart = true ; 在 supervisord 启动的时候也自动启动
startsecs = 5 ; 启动 5 秒后没有异常退出,就当作已经正常启动了
autorestart = true ; 程序异常退出后自动重启
startretries = 3 ; 启动失败自动重试次数,默认是 3
user = root ; 用哪个用户启动
redirect_stderr = true ; 把 stderr 重定向到 stdout,默认 false
stdout_logfile_maxbytes = 20MB ; stdout 日志文件大小,默认 50MB
stdout_logfile_backups = 20 ; stdout 日志文件备份数
stdout_logfile = /var/log/expressbot_stdout.log ; 日志文件

启动 supervisor

1
supervisord -c /etc/supervisord.conf

supervisorctl 管理命令

1
2
3
4
5
6
7
supervisorctl start projectname # 启动进程
supervisorctl stop projectname # 结束进程
supervisorctl restart projectname # 重启进程
supervisorctl stop all # 停止所有进程
supervisorctl update # 更新变动的进程配置
supervisorctl reload # 重启所有进程
supervisorctl status # 查看进程状态

supervisord 模板

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[supervisord]
nodaemon=true
logfile=/dev/null
logfile_maxbytes=0
user=root

[include]
files = /etc/supervisord.d/*.conf

[program:vncserver]
command=/usr/bin/vncserver -localhost no :1 -passwd /root/.vnc/passwd -useold
directory=/root

[program:ytdl]
directory=/ytdlbot
command=python ytdl.py
autorestart=true
stdout_logfile=/dev/fd/1
stdout_logfile_maxbytes=0
redirect_stderr=true