不灭的焱

革命尚未成功,同志仍须努力

作者:php-note.com  发布于:2017-02-21 09:56  分类:Linux软件安装/优化  编辑

Supervisor是一个进程管理工具,官方的说法:

用途就是有一个进程需要每时每刻不断的跑,但是这个进程又有可能由于各种原因有可能中断。当进程中断的时候我希望能自动重新启动它,此时,我就需要使用到了Supervisor

主要就两个命令:

  • supervisord : supervisor的服务器端部分,启动 supervisor 就是运行这个命令
  • supervisorctl:启动 supervisor 的命令行窗口。

安装(CentOS):

方式一:

yum -y install python-setuptools
easy_install supervisor

方式二:

如果 easy_install 不好使就从官方下载:

wget https://pypi.python.org/packages/source/s/supervisor/supervisor-3.1.3.tar.gz

然后通过 python 安装:

tar zxf supervisor-3.1.3.tar.gz
cd supervisor
python setup.py install

成功安装后可以登录 python 控制台输入 import supervisor 查看是否能成功加载。

 

生成配置文件(supervisord.conf):

echo_supervisord_conf > /etc/supervisord.conf

修改配置文件:

supervisord.conf 最后增加(分号后边的表示注释,可以不写):

[program:bandwidth]
command=python26 /usr/local/bin/bandwidth.sh  ;需要执行的命令wd)
user=root  ;(default is current user, required if root)
autostart=true  ;start at supervisord start (default: true)
autorestart=true  ;whether/when to restart (default: unexpected)
startsecs=3  ;number of secs prog must stay running (def. 1)
stderr_logfile=/tmp/bandwidth_err.log  ;redirect proc stderr to stdout (default false) 错误输出重定向
stdout_logfile=/tmp/bandwidth.log  ;stdout log path, NONE for none; default AUTO, log输出

(更多配置说明请参考:http://supervisord.org/configuration.html

运行命令:

启动 supervisor

supervisord -c /etc/supervisord.conf

打开命令行

[root@52php bin]# supervisorctl status   
bandwidth                        RUNNING   pid 2423, uptime 0:06:35  
[root@iZ2365j7l5bZ bin]# supervisorctl help   
  
default commands (type help <topic>):   
=====================================   
add    clear  fg        open  quit    remove  restart   start   stop  update    
avail  exit   maintail  pid   reload  reread  shutdown  status  tail  version  

ctl中: help // 查看命令

ctl中: status // 查看状态

特别注意:

如果修改了 /etc/supervisord.conf,需要执行 supervisorctl reload 来重新加载配置文件,否则不会生效。。。

 

常用命令:

  • supervisord,初始启动Supervisord,启动、管理配置中设置的进程。
  • supervisorctl stop programxxx,停止某一个进程(programxxx),programxxx为[program:beepkg]里配置的值,这个示例就是beepkg。
  • supervisorctl start programxxx,启动某个进程
  • supervisorctl restart programxxx,重启某个进程
  • supervisorctl stop groupworker: ,重启所有属于名为groupworker这个分组的进程(start,restart同理)
  • supervisorctl stop all,停止全部进程,注:start、restart、stop都不会载入最新的配置文件。
  • supervisorctl reload,载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程。
  • supervisorctl update,根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启。

  

实例:Supervisord 管理 beego 系统

  1. 修改配置 /etc/supervisord.conf

    [include]
    files = /etc/supervisord.conf.d/*.conf
  2. 新建管理的应用

    cd /etc/supervisord.conf.d
    vim beepkg.conf

    配置文件:

    [program:beepkg]
    directory = /opt/app/beepkg
    command = /opt/app/beepkg/beepkg
    autostart = true
    startsecs = 5
    user = root
    redirect_stderr = true
    stdout_logfile = /var/log/supervisord/beepkg.log