supervisor 管理程序异常崩溃 自动启动
安装
- 安装配置:
安装: yum install supervisor -y
默认配置文件:cat /etc/supervisord.conf
配置路径: /etc/supervisord.d
默认文件结尾: ini
配置案例
- 配置nginx 启动案例:cat /etc/supervisord.d/supervisor_nginx.ini
# cat /etc/supervisord.d/supervisor_nginx.ini
[program:supervisor_nginx]
command=/usr/sbin/nginx -p /etc/nginx/
;程序启动命令
directory=/etc/nginx/
; 执行命令的路径
autostart=true
; 在supervisord启动的时候也自动启动
startsecs=10
; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒
autorestart=true
; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启
startretries=60
; 启动失败自动重试次数,默认是3
user=root
; 用哪个用户启动进程,默认是root
priority=999
; 进程启动优先级,默认999,值小的优先启动
redirect_stderr=true
; 把stderr重定向到stdout,默认false
stdout_logfile_maxbytes=50MB
; stdout 日志文件大小,默认50MB
stdout_logfile_backups = 10
; stdout 日志文件备份数,默认是10
;stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile=/var/log/supervisor/supervisor_nginx.log
stderr_logfile=/var/log/supervisor/supervisor_nginx.log
loglevel=info
;日志的级别
stopasgroup=false
;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
killasgroup=false
;默认为false,向进程组发送kill信号,包括子进程
- 主程序 启动
~# supervisord -c /etc/supervisord.conf
- 控制进程 supervisorctl 需要确定:程序前台运行,才能获取 PID
# supervisorctl status supervisor_nginx
supervisor_nginx RUNNING pid 9460, uptime 0:37:29
4.supervisorctl 客户端操作
supervisorctl stop supervisor_nginx
supervisorctl start supervisor_nginx
supervisorctl restart supervisor_nginx
supervisorctl reread # 加载配置
supervisorctl update
注意:
### 问题:
command中指定的进程已经起来,但supervisor还不断重启
问题描述:command中启动方式为后台启动,导致识别不到pid,然后不断重启,这里使用的是elasticsearch,command指定的是$path/bin/elasticsearch -d
解决办法:supervisor无法检测后台启动进程的pid,而supervisor本身就是后台启动守护进程,因此不用担心这个
nginx 前台启动:
daemon off;