预计阅读本页时间:-
附录C 用Supervisor批量管理进程
Supervisor,简单来说,就是一个Python编写的进程管理器。虽然在Shell下面我们可以用nohup的方式将程序放在后台执行,一个或几个还比较方便,如果有很多重要的进程需要管理的话,就不方便了。我们的线上机器,一般都有大量重要的Python或Shell程序在后台运行,大家可以试想一下十几或二十几个重要的Python程序在后台里运行的场景,这个时候采用Supervisor来进行批量管理就非常方便了。工作中很常见的一个问题是:比如很不幸地,服务器出现崩溃问题或人为重启,导致所有应用程序都退出了,此时可以用Supervisor同时启动所有程序而不是一个一个地敲命令来启动。
Supervisor在CentOS 6.4 x86_64下的安装
广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元
因为笔者的机器提前安装了epel源,所以安装就非常方便了,命令如下所示:
yum -y install supervisor
启动Supervisor的命令也很简单,如下所示:
supervisord -c /etc/supervisord.conf
Supervisor的配置文件为/etc/supervisord.conf,比较简单,详细配置文档可以参考其官方文档。这里不再进行详细说明,官方文档地址如下所示:http://supervisord.org/configuration.html
我们可以根据需要修改里面的配置。在这里,每个不同的项目,使用了一个单独的配置的文件,放置在/etc/supervisor/下面,于是修改/etc/supervisord.conf,加上如下内容:
[include]
files = /etc/supervisor/*.conf
这样的好处就是如果有很多进程需要管理,可以进行批量管理,或者直接在/etc/supervisor.conf文件里添加多个进程管理,这也是可以的。下面以工作中的机器来举例说明下,/etc/supervisord.conf文件内容如下所示:
我们用cat命令查看supervisord.conf文件,命令如下所示:
cat /etc/supervisord.conf | grep -v "^;"
命令显示结果如下所示:
[unix_http_server]
file=/tmp/supervisor.sock
;UNIX socket文件路径,这里采用
Socket的方式管理而非端口,前者较之后者更为安全
[supervisord]
logfile=/tmp/supervisord.log ;Supervisord日志文件路径
logfile_maxbytes=50MB ;Supervisord日志文件大小,超出会
rotate
logfile_backups=10 ;日志文件保留备份数量,默认值为
10
loglevel=info ;Supervisord日志级别,这里为
info
pidfile=/tmp/supervisord.pid ;Supervisord的
pid文件路径
nodaemon=false ;Supervisord以
daemon 的方式运行
minfds=1024 ;可以打开的文件描述符的最小值,这里为
1024
minprocs=200 ;可以打开的进程数的最小值,这里为
200
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface ;此处配置成默认值
[supervisorctl]
serverurl=unix:///tmp/supervisor.sock
;通过
Unix Socket连接
Supervisord
command=/usr/bin/python index.py ;程序的启动命令
directory=/home/yhc/ContentEngine/api ;程序的启动目录
autostart=true ;在
Supervisord启动的时候也自动启动
autorestart=true ;程序异常退出时自动重启
user=yhc ;程序用哪个用户启动
redirect_stderr=true ;把
stderr重定向到
stdout,即重定向错误日志
stdout_logfile=/data/log/service_index.log ;sdout日志输出路径
command=/usr/bin/python masterManager.py
directory=/home/yhc/ContentEngine
autostart=true
autorestart=true
user=yhc
redirect_stderr=true
stdout_logfile=/data/log/service_master.log
Supervisord配置文件至少需要一个
上面这个命令会进入supervisorctl的Shell界面,然后可以执行不同的命令了:
·status#查看程序状态。
·stop index#关闭index程序。
·start index#启动index程序。
·restart index#重启index程序。
·reread#读取有更新(增加)的配置文件,不会启动新添加的程序。
·update#重启配置文件修改过的程序。
注意
Supervisor并非只能管理Python程序,同样可以管理Shell程序或其他程序。