# 安装
~~~SHELL
yum install supervisor
~~~
# 设置开机启动
~~~SHELL
systemctl enable supervisord.service
~~~
# 配置文件
supervisord 的配置 文件是`/etc/supervisord.conf`
自定义配置文件目录是`/etc/supervisord.d`,该目录下文件已`.ini`为后缀
# 配置进程
例如有个nginx进程设置
~~~SHELL
vim /etc/supervisord.d/nginx.ini
内容如下
[program:nginx]
;directory = /www/lanmps/bin ; 程序的启动目录
command = /www/lanmps/bin/nginx start ; 启动命令,可以看出与手动在命令行启动的命令是一样的
autostart = true ; 在 supervisord 启动的时候也自动启动
startsecs = 5 ; 启动 5 秒后没有异常退出,就当作已经正常启动了
autorestart = true ; 程序异常退出后自动重启
startretries = 3 ; 启动失败自动重试次数,默认是 3
user = www ; 用哪个用户启动
redirect_stderr = true ; 把 stderr 重定向到 stdout,默认 false
stdout_logfile_maxbytes = 20MB ; stdout 日志文件大小,默认 50MB
stdout_logfile_backups = 20 ; stdout 日志文件备份数
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile = /www/logs/usercenter_stdout.log
stopasgroup=false ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
killasgroup=false ;默认为false,向进程组发送kill信号,包括子进程
; 可以通过 environment 来添加需要的环境变量,一种常见的用法是修改 PYTHONPATH
; environment=PYTHONPATH=$PYTHONPATH:/path/to/somewhere
~~~
[program:sms_1902]
command = python /www/wwwroot/market_1802_api/market_1.py
autostart = true
startsecs = 5
autorestart = true
startretries = 3
user = root
redirect_stderr = true
stdout_logfile_maxbytes = 20MB
stdout_logfile_backups = 20
;stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile = /www/wwwroot/market_1802.log
stopasgroup=false
killasgroup=false
# supervisord 客户端管理命令
~~~SHELL
supervisorctl status # 状态
supervisorctl stop nginx #关闭 nginx
supervisorctl start nginx #启动 nginx
supervisorctl restart nginx #重启 nginx
supervisorctl reread
supervisorctl update #更新新的配置
~~~
# 其他
~~~SHELL
supervisord:服务守护进程
supervisorctl:命令行客户端
~~~