Linux supervisord进程管理

Supervisor(http://supervisord.org/)是用Python开发的一个服务,用于在Linux/Unix系统下的一个进程管理工具。它可以很方便的监听、启动、停止、重启一个或多个进程。用Supervisor管理的进程,当一个进程意外被杀死,supervisort监听到进程死后,会自动将它重新拉起,保证进程的运行。不再需要自己写shell脚本来控制。可以用于保证异步任务的运行。

Supervisor安装

yum install supervisor

配置

通过yum安装supervisor后会自动生成对应的配置文件。配置文件的名字为supervisord.conf。通常位于/etc/supervisor.conf。如果找不到可以用下面的命令搜索下。

sudo find / -name supervisord.conf
配置文件说明

[unix_http_server]
file=/tmp/supervisor.sock   ;UNIX socket 文件,supervisorctl 会使用

;[inet_http_server]         ; HTTP服务器,提供web管理界面
;port=127.0.0.1:9001        ; 地址加端口,一般生产环境不开启此项。常用功能使用命令行即可满足需求
;username=user              ; 用户名
;password=123               ; 密码

[supervisord]
logfile=/tmp/supervisord.log ; supervisor的日志文件路径
logfile_maxbytes=50MB        ; 日志文件的最大大小。超出此大小会分割日志文件。设置为0则不限制大小。 
logfile_backups=10           ; 日志文件保留备份数量默认10,设为0表示不备份
loglevel=info                ; 日志级别,默认info,其它: debug,warn,trace
pidfile=/tmp/supervisord.pid ; supervisord pidfile; default supervisord.pid			     ; pid 文件
nodaemon=false               ; 是否在前台启动,默认是false
minfds=1024                  ; min. avail startup file descriptors; default 1024
minprocs=200                 ; min. avail process descriptors;default 200


[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ; 连接到supervisord的sock url。使用默认配置即可

[program:xyz]                  ;要守护的进程。其中xyz为要守护的进程名字,用于在supervisor中标识该进程。
command=/bin/cat               ; 程序的启动命令
process_name=%(program_name)s_%(process_num)02d ; 同一个脚本,要运行为多个进程时,进程的命名规则。program_name为进程名,process_num为第几个进程
numprocs=1                     ; 此进程可以运行的个数。与process_name配合使用 
priority=999                   ; 存在多个要守护的进程时,此进程启动的优先级
autostart=true                 ; supervisor启动时是否自动启动此进程
startsecs=1                    ; 启动1秒后没有异常退出,则认为进程启动成功。默认为1
startretries=3                 ; 启动失败时,重新启动的次数
autorestart=unexpected         ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启
user=chrism                    ; 用哪个用户启动进程,默认是root
redirect_stderr=true           ; 把stderr重定向到stdout,默认false
stdout_logfile=/a/path         ; stdout log path, NONE for none; default AUTO
stdout_logfile_maxbytes=1MB    ; stdout 日志文件大小,默认50MB
stdout_logfile_backups=10      ; stdout 日志文件备份数,默认是10
;stderr_logfile=/a/path        ; stdout 日志文件(supervisor不会自动创建目录,所以设置的目录必须存在)
stderr_logfile_maxbytes=1MB    ; stderr 日志文件大小,默认50MB(default 50MB)
stderr_logfile_backups=10      ; stderr 日志文件备份数,默认是10

;其它配置文件
[include]
files = relative/directory/*.ini  ;此目录下和所有ini文件。ini文件中可以配置要守护的进程。格式与前文[program:xyz]的配置相同。一个ini文件中可以配置多个进程。supervisor启动时,除启动此配置文件指定的进程外,也会启动ini文件中指定的进程。

supervisor 交互命令

启动supervisor
sudo systemctl start supervisord        ;启动
sudo systemctl status supervisord       ;查看运行状态
sudo systemctl stop supervisord         ;停止
sudo systemctl restart supervisord      ;重启
supervisor bash 终端命令
  • 查看当前守护的进程
sudo supervisorctl status     ;查看当前守护的进程

ewallet-create-ewallet RUNNING pid 6591, uptime 12:31:51
ewallet-create-workcredit RUNNING pid 7362, uptime 12:31:37
ewallet-ewallet-request-payment-changed STOPPED Feb 25 11:46 PM

第一列表示进程名称,进程名称在配置文件的[program:xyz] 块中
第二列表示状态。RUNNING表示正在运行,STOPED停止
uptime表示进程持续运行时间

  • 启动一个守护进程
sudo supervisorctl start ewallet-ewallet-request-payment-changed   ;启动一个进程(ewallet-ewallet-request-payment-changed为进程名称)

注意

  1. 必须通过supervisor启动进程,才能被守护。直接通过bash或其他方式启动的不会被守护
  2. Supervisor只能管理非daemon的进程。不能管理守护进程。
  • 停止一个守护进程
sudo supervisorctl stop ewallet-ewallet-request-payment-changed
  • 重启一个守护进程
sudo supervisorctl restart ewallet-ewallet-request-payment-changed
  • 重新读取配置
sudo supervisorctl update

配置文件有更新,添加修改或者删除进程后,使用此命令。重新载入配置。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值