用Supervisor管理进程

supervisor地址:http://supervisord.org,官方标语就是:一个进程管理工具。

安装:

sudo apt-get install supervisor # pip/easy_install

安装好以后,有两个可执行文件和一个配置文件(平台差异,可能路径不一致):

/usr/bin/supervisord             --  supervisor服务守护进程
/usr/bin/supervisorctl           --  supervisor服务控制程序,比如:status/start/stop/restart xx 等
/etc/supervisor/supervisord.conf --  配置文件,定义服务名称以及接口等等

Supervisor 有两个可执行程序 – supervisord 和 supervisorctl:

supervisord 是后台管理服务器, 用来依据配置文件的策略管理后台守护进程, 它会随系统自动启动
supervisorctl 用于管理员向后台管理程序发送 启动/重启/停止 等指令;
它们之间的关系就相当于 Apache 的 httpd 和 apachectl.

supervisord,初始启动Supervisord,启动、管理配置中设置的进程。
supervisorctl stop programxxx,停止某一个进程(programxxx),programxxx为[program:chatdemon]里配置的值,这个示例就是chatdemon。
supervisorctl start programxxx,启动某个进程
supervisorctl restart programxxx,重启某个进程
supervisorctl stop all,停止全部进程,注:start、restart、stop都不会载入最新的配置文件。
supervisorctl reload,载入最新的配置文件,并按新的配置启动、管理所有进程。

配置文件:

[inet_http_server]
; Web管理界面设定
port=9001
username = admin
password = yourpassword

; 管理的单个进程的配置,可以添加多个program
; 文档 http://supervisord.org/configuration.html#program-x-section-settings
[program:py-chess]
; command 字段设置的是后台守护应用的启动命令,
; 注意: 该命令必须是在前台执行的, 即会独占控制台, 否则会导致 supervisor 无法获得标准输出, 并失去进程的控制权.
command=python /var/www/py-chess/app.py
autostart = true
startsecs = 5
user = root
redirect_stderr = true
stdout_logfile = /var/log/supervisord/py-chess.log