Supervisor的安装与使用入门

Supervisor是一个进程管理工具,官方的说法

用途就是有一个进程需要每时每刻不断的跑,但是这个进程又有可能由于各种原因有可能中断。当进程中断的时候我希望能自动重新启动它,此时,我就需要使用到了Supervisor

这个工具主要就两个命令:

supervisord : supervisor的服务器端部分,启动supervisor就是运行这个命令

supervisorctl : 启动supervisor的命令行窗口。

常见的命令如下:










































命令说明
supervisord初始启动Supervisord,启动、管理配置中设置的进程
supervisorctl stop programxxx停止某一个进程(programxxx),programxxx为[program:chatdemon]里配置的值,这个示例就是chatdemon
supervisorctl start programxxx启动某个进程
supervisorctl restart programxxx重启某个进程
supervisorctl stop groupworker重启所有属于名为groupworker这个分组的进程(start,restart同理)
supervisorctl stop all停止全部进程,注:start、restart、stop都不会载入最新的配置文件
supervisorctl reload载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程
supervisorctl update根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启。注意:显示用stop停止掉的进程,用reload或者update都不会自动重启

安装(Centos):

1
2
3
4
5
6
7
8
9
10
11
12
# yum install python-setuptools
# easy_install supervisor

如果easy_install不好使就从官方下载:
然后通过python安装:
# wget --no-check-certificate https://pypi.python.org/packages/80/37/964c0d53cbd328796b1aeb7abea4c0f7b0e8c7197ea9b0b9967b7d004def/supervisor-3.3.1.tar.gz
# tar zxf supervisor-3.3.1.tar.gz
# cd supervisor-3.3.1
# python setup.py install

还可以直接用pip安装
#pip install supervisor

更多安装方法看官方文档
成功安装后可以登陆python控制台输入import supervisor 查看是否能成功加载。

生成配置文件(supervisord.conf):

echo_supervisord_conf > /etc/supervisord.conf

修改配置文件:

supervisord.conf最后增加(分号后边的表示注释,可以不写):

1
2
3
4
5
6
7
8
9
[program:bandwidth]
command=python26 /usr/local/bin/bandwidth.sh ;需要执行的命令wd)
user =root ;(default is current user , required if root)
autostart=true ;start at supervisord start (default: true)
autorestart=true ;whether/when to restart (default: unexpected)
startsecs=3 ;number of secs prog must stay running ( def . 1)如果超过这个时间没有挂,说明启动成功
stderr_logfile=/tmp/bandwidth_err.log ;redirect proc stderr to stdout (default false) 错误输出重定向
stdout_logfile=/tmp/bandwidth.log ;stdout log path, NONE for none; default AUTO, log输出
(更多配置说明请参考:http://supervisord.org/configuration.html)

运行命令:

supervisord -c /etc/supervisord.conf //启动supervisor

supervisorctl //打开命令行

[root]# supervisorctl status
bandwidth RUNNING pid 2423 , uptime 0 : 06 : 35
[root]# supervisorctl help

1
2
3
4
default  commands (type help <topic>):   
=====================================
add clear fg open quit remove restart start stop update
avail exit maintail pid reload reread shutdown status tail version

ctl中: help //查看命令

ctl中: status //查看状态

另外有一个坑需要注意:如果修改了 /etc/supervisord.conf ,需要执行 supervisorctl reload 来重新加载配置文件,否则不会生效。

如果启动后提示下面错误

1
Error: Another program is already listening on a port that one of our HTTP servers is configured to use. Shut this program down first before starting supervisord.

解决办法:

1
2
3
sudo unlink /tmp/supervisor.sock 
or
sudo unlink /var/run/supervisor.sock

下面是我使用的一个例子

1
2
3
4
5
[program:shadowsocks]
command=nohup python /root/shadowsocks/server.py m>> ssserver.log 2>&1 &
autostart=true
autorestart=true
user=root

参考资料:

https://segmentfault.com/a/1190000003955182

https://github.com/shadowsocks/shadowsocks/wiki/%E7%94%A8-Supervisor-%E8%BF%90%E8%A1%8C-Shadowsocks