supervisor 使用相关问题
简介
Supervisor 是一款 Python 开发的进程管理系统,允许用户监视和控制 Linux 上的进程,能将一个普通命令行进程变为后台守护进程,异常退出时能自动重启
常见问题
使用supervisor添加子配置文件时, 执行以下命令
supervisorctl rereadbash
后提示No config updates to processes
产生原因可能如下
- 配置文件没写对, 导致运行不起来
- centos路径没引用对
解决办法
1.正确路径
通常我们加载子配置文件是会将配置文件supervisord.conf的最后一部分修改为
[include]
files=/root/supervisor/conf.d/*.inibash
这里有几个细节(都是我遇到过的并且踩坑了的)
- files后面最好不要加空格, 例如
files = /root/supervisor/conf.d/*.ini这种有可能会找不着路径
- 有的如果是
*.conf结尾的可能也用不起, 最好还是改成ini结尾的
- 最开始这部分是注释着的, 最后取消注释的时候记得把
[include]这个也取消注释了,这也是我踩过的坑:sweat:
2.正确配置文件
关于配置文件的修改可以参考如下:
[program:test]
command=sh /root/supervisord/test.sh
priority=999 ; 相对启动优先级,数值越小越优先,默认为999
autostart=true ; 在supervisor启动时自动启动,默认为true
autorestart=true ; 在意外退出时重新启动,默认为true
startsecs=10 ; 子进程启动多少秒后状态为running则认为启动成功,默认为1
startretries=3 ; 尝试启动的最大次数,默认为3
exitcodes=0,2 ; 进程的预期退出代码列表,默认为0
stopsignal=QUIT ; 终止进程的信号,默认为TERM
stopwaitsecs=10 ; 在SIGKILL之前等待的最大秒数,默认为10
user=root ; 在某用户下设置uid来启动程序,默认不切换用户
redirect_stderr=true ; 是否重定向stdout和stderr,默认为false
stdout_logfile=/tmp/supervisor.stdout.log ; stdout的输出文件,默认为AUTO
stdout_logfile_maxbytes=50MB ; stdout最大文件大小,默认为50MB
stdout_logfile_backups=10 ; stdout文件备份数,设为0则不备份,默认为10bash
其实只需要配置3个参数,其它不用管:
command=sh /root/supervisord/test.sh: 我们的子进程启动命令;stdout_logfile=/tmp/supervisor.stdout.log: 日志;program:test:进程名为test,如果进程哪一天想停止启动等,需要进程名;
最后
修改完后再次输入supervisorctl reread 应该就会获取到子进程配置文件并且启动进程了
再不行就输入一下 supervisorctl reload (重启 supervisord), supervisorctl update (改动某配置文件,重新加载)什么的就大功告成啦:ok_hand:
附录
supervisorctl 常用命令
新增某配置文件,重新加载
supervisorctl reread
改动某配置文件,重新加载
supervisorctl update
重启 supervisord
supervisorctl reload
查看所有进程状态
supervisorctl status
查看指定进程状态
supervisorctl status <name>
启动所有子进程
supervisorctl start all
启动指定子进程
supervisorctl start <name>
重启所有子进程
supervisorctl restart all
重启指定子进程
supervisorctl restart <name>
停止所有子进程
supervisorctl stop all
停止指定子进程
supervisorctl stop <name>
添加子进程到进程组
supervisorctl add <name>
从进程组移除子进程,需要先stop。注意:移除后,需要使用reread和update才能重新运行该进程
supervisorctl reomve <name