supervisor-进程管理工具

来源:互联网 发布:sql商务系统开发培训 编辑:程序博客网 时间:2024/06/06 11:19

Supervisord是用Python实现的一款非常实用的进程管理工具,monit和supervisord的一个比较大的差异是supervisord管理的进程必须由supervisord来启动,monit可以管理已经在运行的程序;supervisord还要求管理的程序是非daemon程序,supervisord会帮你把它转成daemon程序,因此如果用supervisord来管理nginx的话,必须在nginx的配置文件里添加一行设置daemon off让nginx以非daemon方式启动。官方文档:http://supervisord.org/index.html

安装

这里我们选择在python2.7虚拟环境里安装,进入虚拟环境,再用pip安装

source virtualENv/pyleus27Env/bin/activate      #进入虚拟环境pip install supervisor                  #安装supervisor

安装完成后会多出两个命令supervisorctlsupervisord,也可以这样测试是否安装成功命令行:echo_supervisord_conf有输出

修改配置文件

创建配置文件

sudo echo_supervisord_conf > /etc/supervisord.conf
vim /etc/supervisord.conf1.在supervisord.conf最后增加:    ;hello为指定的服务名称    [program:hello]    ;需要执行的命令    ; command = redis-server    ; command=python /home/smallfish/hello.py    ;用虚拟环境运行    command =/home/rdy/virtualENv/pyleus27Env/bin/python /home/rdy/workspace/healthy_topology/test.py    ;supervisor启动的时候是否随着同时启动    autostart=true    ;当程序跑出exit的时候,这个program会自动重启    autorestart=true    ;程序重启时候停留在runing状态的秒数    startsecs=3    ;捕获标准输出    stdout_logfile=/var/log/test.log2.配置web管理    将[inet_http_server]及后面的地址、用户名、密码的注释去掉    [inet_http_server]         ; inet (TCP) server disabled by default    port=0.0.0.0:9002        ;用0.0.0.0来允许外网可以访问    username=user              ; (default is no username (open server))    password=123123    这样只需在浏览器中通过访问 http://192.168.0.247:9002就可以对服务器的进程进行管理了3.配置以某个目录为配置文件启动目录[include]files = /home/rdy/supervisor-config/*.ini4.开启防火墙端口/sbin/iptables -I INPUT -p tcp --dport 9002 -j ACCEPT/etc/rc.d/init.d/iptables save

test.py文件内容是直接读取beanstalk消息队列的数据存到redis的测试程序

# !/bash/bin/env python# -*- coding: utf-8 -*-__author__ = 'rdy'import redisimport beanstalkdef set_redis_key(key, value):    r = redis.Redis(host='192.168.0.62', password='11111@qwe34', port=6379, db=5)    # 设值    r.set(key, value)def watch_beanstalk():    beans = beanstalk.Connection(host='192.168.0.62', port=11300)    beans.watch('sb')    job = beans.reserve()    ret = job.body    job.delete()    c = eval(ret)    print(c['mac'], c['alias'])    return c['mac'], c['alias']if __name__ == '__main__':    r = watch_beanstalk()    set_redis_key(r[0], r[1])

部署tornado

[program:api-8000]command=/home/rdy/virtualENv/apiEnv/bin/python /home/project/api/run.py --port=8000autostart=true                ; supervisord守护程序启动时自动启动tornadoautorestart=true              ; supervisord守护程序重启时自动重启tornadoredirect_stderr=true          ; 将stderr重定向到stdoutstdout_logfile = /home/project/api/logs/api-8000.log[program:api-8001]command=/home/rdy/virtualENv/apiEnv/bin/python /home/project/api/run.py --port=8001autostart=true                ; supervisord守护程序启动时自动启动tornadoautorestart=true              ; supervisord守护程序重启时自动重启tornadoredirect_stderr=true          ; 将stderr重定向到stdoutstdout_logfile = /home/project/api/logs/api-8001.log

运行

#指定配置文件运行supervisord -c /etc/supervisord.conf#用默认配置文件运行supervisord#停止全部进程,注:start、restart、stop都不会载入最新的配置文件。supervisorctl stop all#重启(载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程)supervisorctl reload#部分重启(根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启)supervisorctl update
  • 注意:显示用stop停止掉的进程,用reload或者update都不会自动重启。
  • supervisor是用来跑前台进程的,不能用来跑daemon

Supervisord管理

Supervisord安装完成后有两个可用的命令行supervisor和supervisorctl,命令使用解释如下:
* supervisord,初始启动Supervisord,启动、管理配置中设置的进程。
* supervisorctl stop programxxx,停止某一个进程(programxxx),programxxx为[program:chatdemon]里配置的值,这个示例就是chatdemon。
* supervisorctl start programxxx,启动某个进程
* supervisorctl restart programxxx,重启某个进程
* supervisorctl stop groupworker: ,重启所有属于名为groupworker这个分组的进程(start,restart同理)
* supervisorctl stop all,停止全部进程,注:start、restart、stop都不会载入最新的配置文件。
* supervisorctl reload,载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程。
* supervisorctl update,根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启。

打开浏览器输入:http://192.168.0.247:9002, 输入相应用户名和密码,如图:

0 0