用supervisor管理进程

简介

supervisor是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具。可以很方便的监听、启动、停止、重启一个或多个进程。用supervisor管理的进程,当一个进程意外被杀死,supervisor监听到进程死后,会自动将它重启,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制。

安装

配置好yum源后,可以直接安装

yum install supervisor

启动

supervisord -c /etc/supervisord.conf

常用命令介绍

supervisorctl 是 supervisord的命令行客户端工具

supervisorctl status:查看所有进程的状态

supervisorctl stop es:停止es进程

supervisorctl start es:启动es进程

supervisorctl restart es: 重启es进程

supervisorctl update :配置文件修改后可以使用该命令加载新的配置

supervisorctl reload: 重新启动配置中的所有程序

如何把进程加入管理?

我使用一个名叫zhb_test的进程来做一个简单的案例。

首先,修改配置文件,主要是修改program配置的位置,按照套路来说一般都放到/etc目录。也可以用ini文件作为配置文件。

supervisord.conf这个文件是supervisord本身的配置文件,它可以包含子配置文件,在[include]项下面

[include]

files = /etc/supervisord.d/*.ini

现在添加一个进程管理配置文件zhb_test.ini

; The below sample program section shows all possible program subsection values,
; create one or more 'real' program: sections to be able to control them under
; supervisor.

[program:zhb_test]
command=/data/program/zhb_test -flags=zhb_test.gflags        ; the program (relative uses PATH, can take args)
process_name=%(program_name)s                                ; process_name expr (default %(program_name)s)
numprocs=1                                                   ; number of processes copies to start (def 1)
directory=/tmp                                               ; directory to cwd to before exec (def no cwd)
umask=022                                                    ; umask for process (default None)
priority=999                                                 ; the relative start priority (default 999)
autostart=true                                               ; start at supervisord start (default: true)
autorestart=true                                             ; retstart at unexpected quit (default: true)
startsecs=4                                                  ; number of secs prog must stay running (def. 1)
startretries=10                                              ; max # of serial start failures (default 3)
exitcodes=0,2                                                ; 'expected' exit codes for process (default 0,2)
stopsignal=INT                                               ; signal used to kill process (default TERM)
stopwaitsecs=10                                              ; max num secs to wait b4 SIGKILL (default 10) 
user=root                                                    ; setuid to this UNIX account to run the program
stdout_logfile=NONE                                          ; stdout log path, NONE for none; default AUTO
stderr_logfile=NONE                                          ; stderr log path, NONE for none; default AUTO
;redirect_stderr=true                                        ; redirect proc stderr to stdout (default false)
;stdout_logfile=/a/path                                      ; stdout log path, NONE for none; default AUTO
;stdout_logfile_maxbytes=1MB                                 ; max # logfile bytes b4 rotation (default 50MB)
;stdout_logfile_backups=10                                   ; # of stdout logfile backups (default 10)
;stdout_capture_maxbytes=1MB                                 ; number of bytes in 'capturemode' (default 0)
;stdout_events_enabled=false                                 ; emit events on stdout writes (default false)
;stderr_logfile=/a/path                                      ; stderr log path, NONE for none; default AUTO
;stderr_logfile_maxbytes=1MB                                 ; max # logfile bytes b4 rotation (default 50MB)
;stderr_logfile_backups=10                                   ; # of stderr logfile backups (default 10)
;stderr_capture_maxbytes=1MB                                 ; number of bytes in 'capturemode' (default 0)
;stderr_events_enabled=false                                 ; emit events on stderr writes (default false)
;environment=A=1,B=2                                         ; process environment additions (def no adds)
;serverurl=AUTO                                              ; override serverurl computation (childutils)

更新配置文件:supervisorctl update,这样就可以把zhb_test这个进程加入到supervisor管理。

想要重新启动所有被管理的进程,用supervisorctl reload。

如果直接用kill命令kill掉zhb_test进程,那么supervisor会自动重新拉起zhb_test进程,很方便地管理。

如果机器重启,supervisor会开机自启(/etc/init.d/supervisord),那么被它管理的进程也会被拉起。

如果supervisor的ini文件被删除,那么supervisor控制的进程也会被移除,在移除前会stop该进程。

注意:

用supervisor管理redis时,要把redis.conf的daemonize设置为no,否则会重复拉起进程,supervisorctl start时exit status != 0,一直报错。设置为如下:

daemonize no

 daemonize设置为yes时,直接用命令启动redis时(bin conf)就无法以后台启动redis,设置为no才能以后台启动redis。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值