Supervisor的安装与使用入门

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

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

这个工具主要就两个命令:

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

supervisorctl:启动supervisor的命令行窗口。

 

官网 :http://supervisord.org/

安装(Centos):

  1. # yum install python-setuptools
  2. # easy_install supervisor

 

生成配置文件(supervisord.conf): >后面的目录可以随意定义

 

 

# 先创建目录
mkdir /home/supervisord/
# 生成配置文件到目录下
echo_supervisord_conf > /home/supervisord/supervisord.conf 
# 编辑配置文件
vi /home/supervisord/supervisord.conf

 

 

在/home/supervisord/supervisord.conf最后追加如下内容,这个例子是配置think-queue

 

 

[program:think-queue]
command= /usr/local/php/bin/php think queue:work --daemon ; 被监控进程
directory=/home/wwwroot/ys_queue
user=root
;process_name=%(process_num)02d 
;numprocs=5 #启动几个进程
autostart=true ;随着supervisord的启动而启动
autorestart=true ;自动启动
startsecs=1 ;程序重启时候停留在runing状态的秒数
startretries=10 ;启动失败时的最多重试次数
redirect_stderr=true ;重定向stderr到stdout
stdout_logfile=/home/supervisord/supervisor.log ;stdout文件

 

最后,启动

 

supervisord -c /home/supervisord/supervisord.conf

 

查看进程

ps aux | grep supervisord

 

 

如需允许web界面和命令行访问,修改inet_http_server配置

[inet_http_server]  
port=*:9001     ;这里*表示可以让其他终端访问supervisor web界面
username=username ;  用户名  
password=password  ;  密码  

 

 

如果想要supervisord开机自启动

 

 

# 编辑启动文件
vi /etc/rc.local
# 在新行添加要执行的命令
supervisord -c /home/supervisord/supervisord.conf

 

注意:

Supervisor只能管理非daemon的进程,也就是说Supervisor不能管理守护进程。否则提示Exited too quickly (process log may have details)异常。例子中的Tomcat默认是以守护进程启动的,所以我们改成了catalina.sh run,以前台进程的方式运行。

 

配置说明

;*为必须填写项
;*[program:应用名称]
[program:cat]
;*命令路径,如果使用python启动的程序应该为 python /home/test.py, 
;不建议放入/home/user/, 对于非user用户一般情况下是不能访问
command=/bin/cat
;当numprocs为1时,process_name=%(program_name)s
;当numprocs>=2时,%(program_name)s_%(process_num)02d
process_name=%(program_name)s
;进程数量
numprocs=1
;执行目录,若有/home/supervisor_test/test1.py
;将directory设置成/home/supervisor_test
;则command只需设置成python test1.py
;否则command必须设置成绝对执行目录
directory=/tmp
;掩码:--- -w- -w-, 转换后rwx r-x w-x
umask=022
;优先级,值越高,最后启动,最先被关闭,默认值999
priority=999
;如果是true,当supervisor启动时,程序将会自动启动
autostart=true
;*自动重启
autorestart=true
;启动延时执行,默认1秒
startsecs=10
;启动尝试次数,默认3次
startretries=3
;当退出码是0,2时,执行重启,默认值0,2
exitcodes=0,2
;停止信号,默认TERM
;中断:INT(类似于Ctrl+C)(kill -INT pid),退出后会将写文件或日志(推荐)
;终止:TERM(kill -TERM pid)
;挂起:HUP(kill -HUP pid),注意与Ctrl+Z/kill -stop pid不同
;从容停止:QUIT(kill -QUIT pid)
;KILL, USR1, USR2其他见命令(kill -l),说明1
stopsignal=TERM
stopwaitsecs=10
;*以root用户执行
user=root
;重定向
redirect_stderr=false
stdout_logfile=/a/path
stdout_logfile_maxbytes=1MB
stdout_logfile_backups=10
stdout_capture_maxbytes=1MB
stderr_logfile=/a/path
stderr_logfile_maxbytes=1MB
stderr_logfile_backups=10
stderr_capture_maxbytes=1MB
;环境变量设置
environment=A="1",B="2"
serverurl=AUTO

 

 

常用命令

# 查看所有action

supervisorctl help

 

# 控制所有进程

supervisorctl  -c /home/supervisord/supervisord.conf start all

supervisorctl  -c /home/supervisord/supervisord.conf stop all

supervisorctl  -c /home/supervisord/supervisord.conf restart all

 

# 控制目标进程

supervisorctl stop shadowsocks

supervisorctl start shadowsocks

supervisorctl restart shadowsocks

 

supervisord,                     初始启动Supervisord,启动、管理配置中设置的进程。

supervisorctl  -c /home/supervisord/supervisord.conf stop programxxx,   停止某一个进程(programxxx),programxxx为[program:chatdemon]里配置的值,这个示例就是chatdemon。

supervisorctl  -c /home/supervisord/supervisord.conf start programxxx,  启动某个进程

supervisorctl  -c /home/supervisord/supervisord.conf restart programxxx,重启某个进程

supervisorctl  -c /home/supervisord/supervisord.conf stop groupworker: ,重启所有属于名为groupworker这个分组的进程(start,restart同理)

supervisorctl -c /home/supervisord/supervisord.conf stop all,          停止全部进程,注:start、restart、stop都不会载入最新的配置文件。

supervisorctl  -c /home/supervisord/supervisord.conf reload,            载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程。

 

supervisorctl  -c /home/supervisord/supervisord.conf update,            根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启。

 

常见问题:

  1. supervisor命令出现unix:///tmp/supervisor.sock no such file报错

    解决:

             在supervisor默认配置中,其启动的sock等都会放到tmp目录,而tmp目录会自动清理导致无法使用supervisorctl命令,此时:

修改supervisor.conf文件,修改到/var/run/及/var/log/目录,具体配置就不进行贴了,简单直接搜索tmp进行修改即可。

重启supervisor服务,记得kill原来服务。

    来自:http://blog.csdn.net/binggoogle/article/details/70820966

    2.BACKOFF Exited too quickly (process log may have details)

注意:supervisor只能监控前台程序, 如果你的程序是通过fork方式实现的daemon服务,则不能用它监控,否则supervisor> status 会提示:BACKOFF  Exited too quickly (process log may have details)。 因此像apache、tomcat服务默认启动都是按daemon方式启动的,则不能通过supervisor直接运行启动脚本(service httpd start),相反要通过一个包装过的启停脚本来完成,比如tomcat在supervisor下的启停脚本请参考:Controlling tomcat with supervisor或者supervisor-tomcat.conf

 

参考文献

http://www.jianshu.com/p/9abffc905645

 

http://www.360doc.com/content/17/0619/18/17267365_664508603.shtml

 

http://blog.sina.com.cn/s/blog_a846e49b0101elwj.html

 

http://blog.csdn.net/zhousenshan/article/details/52988885

 

https://laravel-china.org/topics/2126/supervisor-installation-configuration-use (推荐看一下)

 

http://www.linuxidc.com/Linux/2017-02/140417.htm

 

其他文献

 

systemd vs supervisord https://segmentfault.com/a/1190000009338835

 

猜你喜欢

转载自nbczw8750.iteye.com/blog/2368442