进程的守护神 - Supervisor

Supervisor是一个Python开发的client/server系统,可以管理和监控*nix上面的进程。不过同daemontools一样,它也不能监控daemon进程

部件

Supervisor有不同的部件组成,部件分别负责不同的功能,对进程进行监控和管理。

安装

安装supervisor很简单,通过pip就可以安装

sudo pip install supervisor

安装完成之后,就可以用"echo_supervisord_conf"命令来生成配置文件,例如

echo_supervisord_conf > /etc/supervisord.conf  
echo_supervisord_conf > /path/to/supervisord.conf

配置

配置文件supervisord.conf是一个ini文件,可以对http_server、supervisord、supervisorctl和program进行配置。不过默认生成的文件已经对大部分进行配置,如果简单使用,只需要配置program的部分就可以了。

配置文件必须要有一个program配置项,这样supervisord才知道哪个program需要被管理和监控。例如下面tornado和nodejs应用的配置

[program:tornado_app]
command=python /home/vagrant/tornado/app.py
startsecs=0
stopwaitsecs=0
autostart=true
autorestart=true
stdout_logfile=/home/vagrant/tornado/log/app.log
stderr_logfile=/home/vagrant/tornado/log/app.err

[program:node_app]
command=node /home/vagrant/node/app.js
startsecs=0
stopwaitsecs=0
autostart=true
autorestart=true
stdout_logfile=/home/vagrant/node/log/app.log
stderr_logfile=/home/vagrant/node/log/app.err

启动

配置文件生成之后,就可以启动supervisord了

supervisord     #默认使用/etc/supervisord.conf的配置文件
supervisord -c /path/to/supervisord.conf

当配置文件变化后,可以通过下面的命令reload conf,然后重启supervisord进程

kill -HUP `cat /tmp/supervisord.pid`   #不过试了一下没有成功

通过supervisordctl管理进程

然后通过supervisorctl就可以监控管理program了

$ supervisorctl -c conf/app.conf  status
node_app                         RUNNING    pid 6916, uptime 0:00:00
tornado_app                      RUNNING    pid 6917, uptime 0:00:00

$ supervisorctl -c conf/app.conf  stop node_app
node_app: stopped

$ supervisorctl -c conf/app.conf  stop tornado_app
tornado_app: stopped

$ supervisorctl -c conf/app.conf  status
node_app                         STOPPED    Apr 04 02:34 AM
tornado_app                      STOPPED    Apr 04 02:35 AM

$ supervisorctl -c conf/app.conf  start all
node_app: started
tornado_app: started

$ supervisorctl -c conf/app.conf  status
node_app                         RUNNING    pid 8080, uptime 0:00:00
tornado_app                      RUNNING    pid 8079, uptime 0:00:00

通过web管理进程

如果配置文件开启http server,那么就可以通过web界面来管理program了。

$ grep -A 3 "inet_http_server" conf/app.conf 
[inet_http_server]         ; inet (TCP) server disabled by default
port=0.0.0.0:8383        ; (ip_address:port specifier, *:port for all iface)
#username=user              ; (default is no username (open server))
#password=123               ; (default is no password (open server))

然后打开 http://domain.com:8383 就可以访问了

问题

通过supervisord可以很方便的管理program,可以同时管理多个program,也可以管理一个program的多个进程。而且提供了命令行、web、xml-rpc的接口来管理和监控进程,通过配置文件,可以指定进程挂掉后如何处理(可以重启或者其它方式处理挂掉的进程)

但是,supervisord本身也是一个program,如果它自己挂掉了怎么办?

::...
免责声明:
当前网页内容, 由 大妈 ZoomQuiet 使用工具: ScrapBook :: Firefox Extension 人工从互联网中收集并分享;
内容版权归原作者所有;
本人对内容的有效性/合法性不承担任何强制性责任.
若有不妥, 欢迎评注提醒:

或是邮件反馈可也:
askdama[AT]googlegroups.com


订阅 substack 体验古早写作:


点击注册~> 获得 100$ 体验券: DigitalOcean Referral Badge

关注公众号, 持续获得相关各种嗯哼:
zoomquiet


自怼圈/年度番新

DU22.4
关于 ~ DebugUself with DAMA ;-)
粤ICP备18025058号-1
公安备案号: 44049002000656 ...::