前言
你好,我是Dr.叶子,用心写最优美的博客,弹最好听的钢琴!
背景
当一个进程必须不断运行,但是这个进程可能因为服务器等多种因素而导致中断。这时候,我们希望能自动重新启动它,就需要使用到了Supervisor 起到守护进程的作用。
一、安装 Supervisor
- 方法1:联网安装
# 联网安装
pip install supervisor
- 方法2:下载安装包上传到服务器,解压安装
PyPi官网: https://pypi.org/project/supervisor/#files
# 下载 supervisor-4.2.1.tar.gz,解压安装
tar zxvf supervisor-4.2.1.tar.gz
cd supervisor-4.2.1
python setup.py build
python setup.py install
# 或者 supervisor-4.2.1-py2.py3-none-any.whl ,解压安装
pip install supervisor-4.2.1-py2.py3-none-any.whl
二、验证安装是否成功
# 执行命令,如果有显示,且没报错,安装成功。
echo_supervisord_conf
- 安装完成后会生成三个执行程序:
1.supervisord
: 守护进程服务(用于接收进程管理命令)
2.supervisorct
: 客户端(用于和守护进程通信,发送管理进程的指令)
3.echo_supervisord_conf
: 生成初始配置文件程序
三、配置进程守护
# 步骤1:运行 echo_supervisord_conf 命令生成 supervisor 的初始化配置文件
echo_supervisord_conf > /etc/supervisord.conf
# 步骤2:编辑 supervisord.conf
vim /etc/supervisord.conf
# 步骤3:修改以下原有的默认配置
# 原先/tmp/目录是缓存目录,Linux 会根据不同情况自动删除其下面的文件,所以需要替换成/var/目录,防止报错
[unix_http_server]
file=/var/run/supervisor.sock
[supervisord]
logfile=/var/log/supervisord.log
pidfile=/var/run/supervisord.pid
[supervisorctl]
serverurl=unix:///var/run/supervisor.sock
# 步骤4:添加以下配置
[program:nginx]
command=/usr/local/nginx/sbin/nginx -s reload ; 程序启动命令
autostart=true ; 在supervisord启动的时候也自动启动
startsecs=10 ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒
autorestart=true ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启
startretries=3 ; 启动失败自动重试次数,默认是3
user=root ; 用哪个用户启动进程,默认是root
priority=999 ; 进程启动优先级,默认999,值小的优先启动
redirect_stderr=true ; 把stderr重定向到stdout,默认false
stdout_logfile_maxbytes=20MB ; stdout 日志文件大小,默认50MB
stdout_logfile_backups = 20 ; stdout 日志文件备份数,默认是10
stdout_logfile=/usr/local/nginx/logs/nginx.out ; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stopasgroup=false ; 默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
killasgroup=false ; 默认为false,向进程组发送kill信号,包括子进程
# 步骤5:保存退出
Esc按键
:wq
# 步骤6:启动 supervisord 服务。默认去找 /etc/supervisord.conf 这个配置文件
supervisord
# 查看 supervisord 服务是否在运行
ps aux | grep supervisord
# 查看 supervisord 服务是否生效
ps -ef | grep nginx
注意: “;”分号为注释标识。
四、Supervisor 常用命令
操作 | 执行命令 |
---|---|
重启 | supervisorctl restart |
更新配置文件 | supervisorctl update |
查看所有进程的状态 | supervisorctl status |
停止所有进程 | supervisorctl stop all |
启动所有进程 | supervisorctl start all |
重启所有进程 | supervisorctl reload all |
添加supervisor.sock链接 | unlink /var/run/supervisor/supervisor.sock |
指定配置文件启动 | supervisord -c /etc/supervisord.conf |
参考来源
【1】博客园: Python—守护进程管理工具(Supervisor)
【2】博客园: 使用Supervisor守护Python进程
【3】CSDN: supervisor配置 nginx
【4】CSDN: “unix:///tmp/supervisor.sock no such file“ 错误解决方案
【5】CSDN: supervisor出现Unlinking stale socket /tmp/supervisor、unix:/run/supervisor/supervisor.sock no such file
后语
- 原创内容,转载说明出处哦!
- 以上内容本人整理,亲测可行,如有任何问题,敬请指正,谢谢~~
- 点赞、收藏、也欢迎打赏,我弹钢琴你听呀~~哈哈!