Supervisor是用Python开发的一个client/server服务,它可以很方便的监听、启动、停止、重启一个或多个进程。还可以保存、管理日志、进行日志切割、日志清理。
当进程意外down掉就会尝试多次重启,很方便可以做到进程恢复。
centos7有system,对于一些开发人员编写的业务,并不是nginx、mysql别人已经集成好了/etc/init.d/mysql.sh启动脚本、mysql.service守护进程脚本
怎么做到对程序进行管理了?你也不想编写脚本来监控、失败重启,那就使用 supervisor ! centos7安装supervisor
yum -y install supervisor
mkdir -p /etc/supervisord.d
echo_supervisord_conf > /etc/supervisord.conf
supervisord -c /etc/supervisord.conf
systemctl enable supervisord
centos6安装supervisor
这种做法安装supervisor可能还是依旧有问题的,这里的问题并不是安装问题,而是可能在使用的过程中,程序卡了,重启服务不生效,所以建议使用centos7
centos6还是自己写个脚本做个检测吧
pip install supervisor==3.1.3
mkdir -p /etc/supervisord.d
echo_supervisord_conf > /etc/supervisord.conf
supervisord -c /etc/supervisord.conf
supervisor命令
supervisor安装完成后会生成三个执行程序:
- supervisortd:用于管理supervisor本身服务,supervisor的守护进程服务(用于接收进程管理命令)
- supervisorctl:用于管理我们需要委托给superviso工具的服务
- echo_supervisord_conf:用于生成superviso的配置文件
配置Supervisor
通过运行echo_supervisord_conf程序生成supervisor的初始化配置文件
echo_supervisord_conf > /etc/supervisord.conf
supervisor的配置文件内容有很多,不过好多都不需要修改就行使用,我这里只修改了以下两项
无需进入文件,使用命令即可更改
#修改socket文件的mode,默认是0700,如果权限管理很严,这句话跳过即可
sed -i 's/;chmod=0700/chmod=0766/g' /etc/supervisord.conf
# 在配置文件最后添加以下两行内容来包含/etc/supervisord目录
sed -i '$a [include] \
files = /etc/supervisord.d/*.conf' /etc/supervisord.conf
修改配置文件,简单的配置文件。;
表示注释
cat > /etc/supervisord.d/npc.conf <<EOF
[program:npc]
directory = /data/nps-client ; 程序的启动目录
command = /data/nps-client/npc start ; 启动命令,后面可以带参数的
autostart = true ; 在 supervisord 启动的时候也自动启动
startsecs = 30 ; 启动 30 秒后没有异常退出,就当作已经正常启动了
autorestart = true ; 程序异常退出后自动重启
startretries = 3 ; 启动失败自动重试次数,默认是 3
user = root ; 用哪个用户启动
redirect_stderr = true ; 把 stderr 重定向到 stdout,默认 false
stdout_logfile_maxbytes = 1000MB ; stdout 日志文件大小,默认 50MB
stdout_logfile_backups = 5 ; stdout 日志文件备份数
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录
stdout_logfile = /data/nps-client/nohup.out ;应用日志目录
EOF
配置文件详解
[program:tomcat] #程序唯一名称
directory=/usr/local/tomcat #程序路径
command=/usr/local/tomcat/bin/catalina.sh run #运行程序的命令
autostart=true #是否在supervisord启动后tomcat也启动
startsecs=10 #启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒
autorestart=true #程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启;意思为如果不是supervisord来关闭的该进程则认为不正当关闭,supervisord会再次把该进程给启动起来,只能使用该supervisorctl来进行关闭、启动、重启操作
startretries=3 #启动失败自动重试次数,默认是3
user=root #用哪个用户启动进程,默认是root
priority=999 #用于重启所有服务,进程启动优先级,默认999,假如Supervisord需要管理多个进程,那么值小的优先启动,这样就可以解决服务依赖的问题。例如a依赖b,但是a先启动了,然后b后启动,导致a服务有问题
stopsignal=INT
redirect_stderr=true #把stderr重定向到stdout标准输出,默认false
stdout_logfile_maxbytes=200MB #stdout标准输出日志文件大小,日志文件大小到200M后则进行切割,切割后的日志文件会标示为catalina.out1,catalina.out2,catalina.out3...,默认50MB
stdout_logfile_backups = 100 #stdout标准输出日志文件备份数,保存100个200MB的日志文件,超过100个后老的将被删除,默认为10保存10个
stdout_logfile=/usr/local/tomcat/logs/catalina.out #标准日志输出位置,如果输出位置不存在则会启动失败
stopasgroup=false #默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
killasgroup=false #默认为false,向进程组发送kill信号,包括子进程
常见命令
# 关闭supervisord
supervisorctl shutdown
# 启动supervisord:supervisord 或者 supervisord -c指定配置文件
supervisord
# 查看是否正常运行、查看指定
supervisorctl status all
supervisorctl status nps
# 启动
supervisorctl start nps
# 启动所有
supervisorctl start all
# 重启所有、指定
supervisorctl restart all
supervisorctl restart nps
# 修改完主配置/etc/supervisord.conf,软重启
supervisorctl reload
# 更改/etc/supervisord.d/目录、更新指定的
supervisorctl update
supervisorctl update nodejs