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 | # yum install python-setuptools |
更多安装方法看官方文档。
成功安装后可以登陆python控制台输入import supervisor 查看是否能成功加载。
生成配置文件(supervisord.conf):
echo_supervisord_conf > /etc/supervisord.conf
修改配置文件:
在supervisord.conf最后增加(分号后边的表示注释,可以不写):
1 | [program:bandwidth] |
运行命令:
supervisord -c /etc/supervisord.conf //启动supervisor
supervisorctl //打开命令行
[root]# supervisorctl status
bandwidth RUNNING pid 2423 , uptime 0 : 06 : 35
[root]# supervisorctl help
1 | default commands (type help <topic>): |
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 | sudo unlink /tmp/supervisor.sock |
下面是我使用的一个例子
1 | [program:shadowsocks] |
参考资料:
https://segmentfault.com/a/1190000003955182
https://github.com/shadowsocks/shadowsocks/wiki/%E7%94%A8-Supervisor-%E8%BF%90%E8%A1%8C-Shadowsocks