守护进程Supervisor
介绍
在一个分布式环境中,每台机器上可能需要启动和停止多个进程,使用命令行方式一个一个手动启动和停止非常麻烦,而且查看每个进程的状态也很不方便。为此Supervisor工具应运而生,它能够对很方便的对多个进程进行简单高效中心化管理。
安装
1 |
|
直接yum安装会报一个No package supervisor available.
的错误,因为CentOS是RedHat企业版编译过来的,去掉了所有关于版权问题的东西。需先安装epel-release
:
1 |
|
如果执行yum install epel-release
出现No package epel-release available
错误,可执行下面的代码解决:
1 |
|
配置
安装完成后执行如下命令,生成默认配置文件:
1 |
|
修改配置文件vim /etc/supervisord.conf
,将最后两行修改为:
1 |
|
表示包含/etc/supervisord.d
下的所有ini
后缀的配置文件,其中每个ini
代表一个进程的启动配置。
继续把配置中/tmp
路径换成/var/supervisord
(由于tmp是临时目录,有可能会被系统自动删除,所以建议换个目录)
1 |
|
修改完配置之后,创建配置中相关的目录和文件:
1 |
|
一个jar进程的配置文件示例:
1 |
|
主要参数介绍:
- directory:执行目录,若有
/home/test/test1.py
;将directory设置成/home/test
,则command只需设置成python test1.py
; - numprocs:进程数量;
- priority:优先级,值越小优先级越高,默认值999;值越小,最先启动,并且最后被关闭;
- autostart:如果是true,当supervisor启动时程序将会自动启动;
- autorestart:程序异常退出后自动重启;
- startsecs:启动后程序需要保持运行的总秒数,则认为启动成功(将进程状态从
STARTING
标记为RUNNING
),默认1秒; - startretries:启动失败自动重试次数,默认3次;
- redirect_stderr:把 stderr 重定向到 stdout,默认 false;
更多配置文件说明,可参见官方文档:http://supervisord.org/configuration.html#program-x-section-values
启动,停止,查看服务状态:
1 |
|
管理进程
启动,停止,重启,查看状态:
1 |
|
重新加载进程配置文件:
1 |
|
按组划分进程
supervisor可以通过设置优先级按顺序启动进程,但不支持等待上个进程完再执行下一个进程,在github上存在这个open issue。
可通过给进程划分组的方式变相实现,首先修改配置文件vim /etc/supervisord.conf
,为进程设置组:
1 |
|
之后再延迟手动启动组内进程:
1 |
|