supervisor介绍
官网地址:supervisor )
一.概述
supervisor是一个client/server架构,允许用户监控和控制一系列的Linux操作系统进程.
二.安装
supervisor是基于Python2开发的.所以安装很简单.只需要以下步骤
1.安装python2的Pip2工具
1 | yum search python2-pip |
2.用pip工具安装supervisor
1 | pip install supervisor |
3.生成一份配置文件
1 | echo_supervisord_conf >配置文件路径 |
note: supervior工具不支持python3
三.配置文件
supervisord.conf是supervisor的配置文件.该配置文件是Windows-INI类型定义的.
分号;开头的为注释行.每个应用以中括号[]开头.在下面以KEY/VALUE键值对定义参数.
以下列举了一些重要参数配置.
详细配置请参考官方文档supervisor配置
1 | [unix_http_server] |
以下列举了nginx的进程管理配置参考:
1 | [program:nginx] |
四.使用supervisor
使用supervisor管理一个应用,必须将程序写入supervisord.conf文件.
格式如下:
1 | [program:应用名] |
定义完supervisord.conf配置文件.就可以启动supervisor了..
启动方式:
1 | $BINDIR/supervisord |
note:启动时最好-c 指定一个配置文件的绝对路径.因为supervisor默认在当前工作目录寻找配置文件.
五.运行supervisorctl
启动方式:
1 | 1.$BINDIR/supervisorctl -c /etc/supervisord/supervisord.conf #这种方式也启动一个shell接口.进入supervisorctl交互界面 |
注意:supervisorctl启动也需要指定参数.不然可能报错误
supervisorctl 动作介绍:
add
添加一个刚刚添加到supervisord.conf配置文件中的应用. remove
和add相反 update重新加载配置文件.并且会自动add/remove应用(如果配置文件有修改)
clear
清除一个程序的日志文件 clear all清除所有程序的日志文件
fg <应用>将某个应用调到前台运行.按CTRL+C退出
pid
获得某个应用的PID pid all获得所有应用的pid
reread 和Update相似,但是不会自动add/remove
restart
重启一个或多个应用, 注意:restart并不会重载supervisord.conf配置文件
restart all 和restart 类似start
…启动一个或多个应用 start all 启动所有应用
status获得所有应用的状态
status
获得一个或多个应用状态 stop
停止一个或多个应用 stop all停止所有
最后 关于autorestart字段:
autorestart还有个值是unexpected.并且默认是unexpected
如果设置为unexpected.那么要结合另外一个属性一起使用:exitcodes . exitcodes属性的值是以逗号为分割的多个数字.
如果设置为unexpected.那么当程序关闭时.程序的退出码(exit code .程序异常关闭,或者被kill,exit code会不一样)如果不在exitcodes定义中内.那么supervisor会autorestart自动重启该应用程序.
如果程序被关闭时的退出码没有被exitcodes指定,那么supervisor会自动重启这个程序.默认值为0,2
如果程序的退出码在exitcodes指定中.那么不会自动重启该程序.
白话解释就是:明确指定的退出状态码,supervisor不会自动启动该程序..如果程序的退出码没有手动指定(也就是意料之外的unexpected),那么supervisor会自动重启该程序
比如下面这个例子,supervisor反复的启动elasticsearch..注意观察elasticsearch的PID一直在变. :
查看supervisor的日志:
elasticsearch一直在不断的启动,异常退出,启动.并且看到elasticsearch的退出码为1
查看elasticsearch的日志:
可以看到elasticsearch一直在退出.然后被supervisor自动重启
修改supervisord.conf配置文件中的elasticsearch配置文件
将autostart=true改成unexpected,
并且加入exitcodes属性.值设为1.
重启supervisor进程
note:重启supervisord进程前.需要kill掉所有supervisord管理的应用程序
重载supervisor配置文件,可以发现supervisor并没有自动重启该应用