Supervisor是一款Linux下的进程管理软件。最主要的两个功能是:
Supervisor的官方网站: Supervisor
Supervisor是基于python开发的。安装Supervisor前,需要先安装python。Supervisor可以通过pip或者easy_install安装。
通过Apt安装
apt-get install supervisor
通过pip安装
pip install supervisor
通过easy_install安装
easy_install supervisor
Supervisor没有默认配置文件,需要手工执行命令生成配置文件:
echo_supervisord_conf > /etc/supervisord.conf
修改配置文件将某业务进程以deamon方式拉起,并对此进行监控:
[program:check12306] command=/opt/blog.cheyo.net/check12306.py autostart=true autorestart=true
启动Supervisor:
supervisord -c /etc/supervisord.conf
停止Supervisor(子进程也会被停止)
supervisorctl shutdown
查看Supervisor是否已经启动:
[root@aaa blog.cheyo.net]# ps -ef | grep supervisor | grep -v grep root 1170 1 0 18:57 ? 00:00:00 /usr/bin/python /usr/bin/supervisord [root@aaa blog.cheyo.net]#
查看业务进程是否已经被拉起:
[root@aaa blog.cheyo.net]# supervisorctl status check12306 RUNNING pid 1230, uptime 0:04:39 [root@aaa blog.cheyo.net]#
Supervisor可通过维护命令supervisorctl管理或通过web管理界面管理。维护命令supervisorctl有两种用法。一种是命令式,一种是交互式。
# 查询各进程运行状态 supervisorctl status # 启、停、重启业务进程,check12306为进程名,即[program:check12306]里配置的值 supervisorctl start check12306 supervisorctl stop check12306 supervisorctl restart check12306 #重启所有属于名为groupworker这个分组的进程 supervisorctl start groupworker supervisorctl stop groupworker supervisorctl restart groupworker #启、停、重启全部进程(不会载入最新的配置文件) supervisorctl start all supervisorctl stop all supervisorctl restart all #重新加载配置文件.停止原有进程并按新的配置启动所有进程 supervisorctl reload #根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启。 supervisorctl update #注意:显示用stop停止掉的进程,用reload或者update都不会自动重启
[root@aaa blog.cheyo.net]# supervisorctl check12306 RUNNING pid 1256, uptime 0:01:47 supervisor> stop check12306 check12306: stopped supervisor> start check12306 check12306: started supervisor> status check12306 RUNNING pid 1258, uptime 0:00:04 supervisor> restart check12306 check12306: stopped check12306: started supervisor> status check12306 RUNNING pid 1259, uptime 0:00:02 supervisor>
开启Supervisor的web管理界面:
[inet_http_server] ; inet (TCP) server disabled by default port=*:9001 ; (ip_address:port specifier, *:port for all iface) username=user ; (default is no username (open server)) password=123 ; (default is no password (open server))
效果如下:
分别在8000和8001两个端口开启两个Tornado进程:
[program:TornadoBlog] command=python /opt/data/product/blog/run.py --port=80%(process_num)02d process_name=80%(process_num)02d stdout_logfile=/opt/data/product/blog/log/tornado-80%(process_num)02d.log numprocs=2 numprocs_start=0 autorestart=true redirect_stderr=true
可以自己编写脚本将Supervisor加入chkconfig中,随系统自动启动。 或者可以使用现成的脚本: Supervisor initscripts