附录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程序或其他程序。