进程管理工具Supervisor的使用 2014-09-30 11:00

基本介绍

Supervisor是一款Linux下的进程管理软件。最主要的两个功能是:

  • 将非daemon程序变成deamon方式运行
  • 对程序进行监控,当程序退出时,可以自动拉起程序

Supervisor的官方网站: Supervisor

安装

Supervisor是基于python开发的。安装Supervisor前,需要先安装python。Supervisor可以通过pip或者easy_install安装。

  • 通过pip安装

    pip install supervisor
  • 通过easy_install安装

    easy_install supervisor

基本使用

  • 生成配置文件

Supervisor没有默认配置文件,需要手工执行命令生成配置文件:

echo_supervisord_conf > /etc/supervisord.conf
  • 基础应用

修改配置文件将某业务进程以deamon方式拉起,并对此进行监控:

1
2
3
4
[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有两种用法。一种是命令式,一种是交互式。

  • 命令式
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
# 查询各进程运行状态
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都不会自动重启
  • 交互式
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
[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>
  • Web管理

开启Supervisor的web管理界面:

1
2
3
4
[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进程:

1
2
3
4
5
6
7
8
[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本身自动启动

可以自己编写脚本将Supervisor加入chkconfig中,随系统自动启动。 或者可以使用现成的脚本: Supervisor initscripts

Tags: #Python    Post on Linux