Supervisor 守护进程使用教程及常用命令

777次阅读
没有评论

共计 2181 个字符,预计需要花费 6 分钟才能阅读完成。

简介

Supervisor 主要负责在启动自身时启动管理的子进程,响应客户端的命令,重启崩溃或退出的子进程,记录子进程 stdout 和 stderr 输出,生成和处理子进程生命周期中的事件。

说直白点就是,Supervisor 作用在于保证配置的进程程序稳定不掉线,如果发生异常报错退出,他能马上进行自动重启,保证服务的正常运行。

通常有一些长期驻守的程序,需要 24 小时不停的运行,本地测试时候,一旦退出命令窗口,程序就随之挂掉了,很难保证他持续运行,即使运行起来了,也很难避免遇到异常情况,服务掉线,这时候 Supervisor 就完美解决了这个问题。

安装

  • Centos
yum install supervisor
  • Debian/Ubuntu
apt-get install supervisor
#或
apt install supervisor
  • pip 安装(由于 supervisor 本身由 python 开发,所以支持 pip 安装)
pip install supervisor

基本配置

默认配置路径:/etc/supervisor/supervisord.conf

有些老版本可能是:/etc/supervisord.conf

supervisord.conf 属于 supoervisro 主进程,默认基本无需修改。

另外还有一个子进程配置文件,默认是不存在的,可以直接在 conf.d 文件夹下新增即可:

子进程,务必放置于 conf.d 文件夹下,并且命名格式后缀为:xxxx.conf

例如:clark.conf

具体配置项目如下:

# 项目名
[program:blog]
#脚本目录
directory=/opt/bin
#脚本执行命令
command=/usr/bin/python /opt/bin/test.py

#supervisor 启动的时候是否随着同时启动,默认 True
autostart=true
#当程序 exit 的时候,这个 program 不会自动重启, 默认 unexpected,设置子进程挂掉后自动重启的情况,有三个选项,false,unexpected 和 true。如果为 false 的时候,无论什么情况下,都不会被重新启动,如果为 unexpected,只有当进程的退出码不在下面的 exitcodes 里面定义的
autorestart=false
#这个选项是子进程启动多少秒之后,此时状态如果是 running,则我们认为启动成功了。默认值为 1
startsecs=1

#脚本运行的用户身份 
user = test

#日志输出 
stderr_logfile=/tmp/blog_stderr.log 
stdout_logfile=/tmp/blog_stdout.log 
#把 stderr 重定向到 stdout,默认 false
redirect_stderr = true
#stdout 日志文件大小,默认 50MB
stdout_logfile_maxbytes = 20MB
#stdout 日志文件备份数
stdout_logfile_backups = 20

以上内容不需要全部都配置,默认配置参照主配置文件:/etc/supervisor/supervisord.conf

新的子进程必须配置的主要参数案例如下:

# 配置案例
[program:clark]
command=bash -c ./mytask.py
directory=/www/wwwroot/
autorestart=true
stdout_logfile=/douxz/log/m7s.out.log
stderr_logfile=/douxz/log/m7s.err.log
user=root
#每一项配置说明,参照上方配置表

重载配置

添加了新的配置文件后,supervisor 还不能马上识别,必须要进行重载才可以:

sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start clark

常用命令

supervisorctl status        // 查看所有进程的状态
supervisorctl stop clark       // 停止进程
supervisorctl start clark      // 启动进程
supervisorctl restart       // 重启进程
supervisorctl update        // 配置文件修改后使用该命令加载新的配置
supervisorctl reload        // 重新启动配置中的所有程序

常见问题

1、使用之前,先开启主程序:
使用命令supervisord -c /etc/supervisord.conf

2、unix:///var/run/supervisor.sock no such file
问题描述:安装好 supervisor 没有开启服务直接使用 supervisorctl 报的错
解决办法:supervisord -c /etc/supervisord.conf

3、启动了多个 supervisord 服务,导致无法正常关闭服务
问题描述:在运行 supervisord -c /etc/supervisord.conf 之前,直接运行过 supervisord -c /etc/supervisord.d/xx.conf 导致有些进程被多个 superviord 管理,无法正常关闭进程。
解决办法:使用 ps -fe | grep supervisord 查看所有启动过的 supervisord 服务,kill 相关的进程。

正文完
加入官方交流QQ群:778957856
post-qrcode
 0
clark
版权声明:本站原创文章,由 clark 于2022-11-25发表,共计2181字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)