使用supervisor工具对我们的非daemon程序做保活,当我们的进程崩溃了或被误杀了后能再次被自动拉起。
CentOS 安装 supervisor
1 | yum install supervisor -y |
安装完成后,使用如下命令生成默认配置文件/etc/supervisord.conf
:
1 | echo_supervisord_conf > /etc/supervisord.conf |
该默认配置文件相当于是supervisor的示例配置,大部分配置都以注释的形式包含在里面了(supervisor配置文件中以分号;
开始的为注释),我们可以把它当成一个小型文档来查阅。
编辑配置文件,在尾部加入如下内容,表示supervisor将读取 /etc/supervisord.d/
下的ini
文件:
1 | [include] |
我们的demo应用
使用shell脚本编写一个测试用的demo应用,功能是每间隔1秒向/tmp/demo.log
中写入一行日志,日志内容为当前时间加上demo自身的进程号,30秒后正常退出。代码如下:
1 | !/bin/bash |
向supervisor添加我们的demo应用
创建我们demo应用的配置
1 | touch /etc/supervisord.d/demo.ini |
写入如下内容(假设我们刚才的demo脚本存放在/tmp/路径下):
1 | [program:demo] |
启动supervisor
1 | service supervisord start |
经测试:
- demo进程在运行30秒后正常退出,demo不会被重新启动
- 如果在30秒内使用
kill -9
杀掉demo进程,demo将被重新拉起
进程退出后是否重新启动与autorestart
、exitcodes
两个配置项相关:
- 如果
autorestart
为true,则不管进程退出时exit code(程序退出码)是多少,都会重新启动 - 如果
autorestart
为false,则不管进程退出时exit code是多少,都不会重新启动 - 如果
autorestart
为unexpected,则进程退出后,如果exit code为exitcodes
配置的值,则不重新启动,反之则重新启动
autorestart
的默认值为unexpected;exitcodes
的默认值为0
如果我们想让被管理的进程在任何情况下退出后都被重新启动(比如我们的demo在运行30秒后会正常退出,我们希望它退出后继续启动,一直循环),则修改/etc/supervisord.d/demo.ini
成如下:
1 | [program:demo] |
停止supervisor
1 | service supervisord stop |
注意,停止supervisord
时,我们的demo进程也会随之结束运行。
使用supervisor操作它所管理的任务
1 | 查看所有任务的状态 |
其它
- supervisord的设置 - http://supervisord.org/configuration.html#supervisord-section-settings
- 具体单个应用的设置 - http://supervisord.org/configuration.html#program-x-section-settings
最后贴上默认配置文件
1 | ; Sample supervisor config file. |
本文完,作者yoko,尊重劳动人民成果,转载请注明原文出处: https://pengrl.com/p/64791/
Gitalking ...