supervisor 是一个用 Python 语言编写的进程管理工具,一般我们用它来对进程进行持久化运行的管理。
安装
使用 apt install supervisor
即可安装 supervisor 。
supervisor 安装完成后会生成三个执行程序:supervisord 、 supervisorctl 、 echo_supervisord_conf,分别是 supervisor 的守护进程服务(用于接收进程管理命令)、客户端(用于和守护进程通信,发送管理进程的指令)、生成初始配置文件程序。
生成初始配置文件
运行 echo_supervisord_conf > /etc/supervisor/supervisord.conf
即可在响应的目录下生产配置文件。
这里有一点题外话,你可以在你想要的地方生产配置文件,但你需要运行 supervisord -c supervisord.conf
来显式指定配置文件的位置。
在 debian 中,配置文件推荐的放置位置是 /etc/supervisor/supervisord.conf
将配置放在此处是因为 systemctl status supervisor.service
的默认配置的位置是在这里,你可以很方便的使用 systemctl
来管理 supervisor 。
修改配置文件
打开刚才的配置文件,一般来说只需要修改 2 处地方,其他的默认即可。将最后的
[include]
files = /yourpath/*.conf
进行修改,将你的其他配置文件放置在你喜欢的地方。
创建 program 配置
你应该根据你的需要来创建 program 配置。当你使用 echo_supervisord_conf 命令来创建配置文件时,一份带注释的 program 配置就已经被写入配置文件。这里我贴出一份翻译过的样例:
;[eventlistener:theeventlistenername]
;command=/bin/eventlistener ; 程序命令(相对使用 PATH,可以带 args)
;process_name=%(program_name)s ; 进程名表达式 (default %(program_name)s)
;numprocs=1 ; 要启动的进程副本数(默认值 1)
;events=EVENT ; 事件通知,要订阅的类型
;buffer_size=10 ; 事件缓冲区队列大小(默认值 10)
;directory=/tmp ; 程序的启动目录
;umask=022 ; 进程的 umask(默认值 无)
;priority=-1 ; 相对启动优先级(默认值 -1)
;autostart=true ; 在 supervisord 启动的时候也自动启动(默认值:true)
;startsecs=1 ; 启动 1 秒后没有退出就当做已经正常启动(默认值 1)
;startretries=3 ; 启动失败自动重试次数(默认值 3)
;autorestart=unexpected ; 程序异常退出后自动重启(默认值 unexpected)
;exitcodes=0 ; 与自动重启一起使用的预期退出代码(默认 0)
;stopsignal=QUIT ; 用于终止进程的信号(默认 TERM)
;stopwaitsecs=10 ; 等待 b4 SIGKILL 的最大秒数(默认 10)
;stopasgroup=false ; 向 UNIX 进程组发送 stop 信号(默认为 false)
;killasgroup=false ; 向 UNIX 进程组发送 kill 信号(默认为 false)
;user=chrism ; 将此 UNIX 帐户设置为运行程序的账户
;redirect_stderr=false ; 如果为 true 则 stderr 的日志会被写入 stdout 日志文件中
;stdout_logfile=/a/path ; stdout 日志路径 NONE 表示无
;stdout_logfile_maxbytes=1MB ; 日志文件最大大小(默认 50MB)
;stdout_logfile_backups=10 ; 日志文件最大备份数(默认 10)
;stdout_events_enabled=false ; 当设置为 ture 的时候,当子进程由 stdout 向文件描述符中写日志的时候,将触发 supervisord 发送 PROCESS_LOG_STDOUT 类型的 event(默认 false)
;stdout_syslog=false ; 使用进程名称将标准输出发送到系统日志(默认为 false)
;stderr_logfile=/a/path ; stderr 日志路径 NONE 表示无
;stderr_logfile_maxbytes=1MB ; 错误日志文件最大大小(默认 50MB)
;stderr_logfile_backups=10 ; 错误日志文件最大备份数(默认 10)
;stderr_events_enabled=false ; 当设置为 ture 的时候,当子进程由 stderr 向文件描述符中写日志的时候,将触发 supervisord 发送 PROCESS_LOG_STDOUT 类型的 event(默认 false)
;stderr_syslog=false ; 使用进程名称将错误输出发送到系统日志(默认为 false)
;environment=A="1",B="2" ; 子进程的环境变量
;serverurl=AUTO ; 覆盖 serverurl 计算(childutils)
supervisorctl 使用
supervisorctl status
supervisorctl stop [programname]
supervisorctl start [programname]
supervisorctl restart [programname]
supervisorctl reread
supervisorctl update
事件监听器
事件是 3.0 版本中引入的 supervisor 的高级功能。如果只是想将 supervisor 用作重新启动崩溃进程的机制或用作手动控制进程状态的系统,则无需了解事件。如果想使用 supervisor 作为流程监控/通知框架的一部分,确实需要了解事件。
对于一些复杂的编程知识先行跳过,感兴趣的可以参考官方文档 http://supervisord.org/events.html 。
官方提供了 superlance 插件,但是这个插件的邮件发送貌似需要 25 端口,但是现在大部分的云服务商为了防止垃圾邮件,都禁止了 25 端口的邮件发送。所以博主后来自己用 python 写了个同样的插件。地址在 https://github.com/NotMings/supervisor-event-listener 相应的食用方法都写在了 readme 里,配置完成后可以直接使用。
Comments 3 条评论
博主 Micro-X
大佬,我用这个主题,评论和发布的时间相差 8 小时。。。无语了
博主 不明
@Micro-X 设置内可以调整时间
博主 淄博
感谢分享,赞一个