最新消息:

Supervisord 进程管理工具

supervisord admin 74浏览 0评论

Supervisor 是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统。它可以很方便的监听、启动、停止、重启一个或多个进程。用Supervisor管理的进程,当一个进程意外被杀死,supervisort监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能

安装

 # pip install supervisor
Collecting supervisor
  Downloading https://files.pythonhosted.org/packages/ca/1f/07713b0e1e34c312450878801d496bce8b9eff5ea9e70d41ff4e299b2df5/supervisor-4.1.0-py2.py3-none-any.whl (318kB)
     |████████████████████████████████| 327kB 10.1MB/s
Installing collected packages: supervisor
Successfully installed supervisor-4.1.0

配置

  1. systemctl 服务

https://github.com/selboo/config/blob/master/usr/lib/systemd/system/supervisord.service

# wget https://raw.githubusercontent.com/selboo/config/master/usr/lib/systemd/system/supervisord.service -O /usr/lib/systemd/system/supervisord.service
  1. supervisord.conf 配置

https://raw.githubusercontent.com/selboo/config/master/etc/supervisord.conf

完整配置可以使用 echo_supervisord_conf 命令生成
这里我,按照自己需求简单修改了下

 # wget https://raw.githubusercontent.com/selboo/config/master/etc/supervisord.conf -O /etc/supervisord.conf

supervisord.conf的配置参数较多,下面介绍一下常用的参数配置,详细的配置及说明,请参考官方文档介绍。

unix_http_server]
file=/tmp/supervisor.sock   ;UNIX socket 文件,supervisorctl 会使用
;chmod=0700                 ;socket文件的mode,默认是0700
;chown=nobody:nogroup       ;socket文件的owner,格式:uid:gid

;[inet_http_server]         ;HTTP服务器,提供web管理界面
;port=127.0.0.1:9001        ;Web管理后台运行的IP和端口,如果开放到公网,需要注意安全性
;username=user              ;登录管理后台的用户名
;password=123               ;登录管理后台的密码

[supervisord]
logfile=/tmp/supervisord.log ;日志文件,默认是 $CWD/supervisord.log
logfile_maxbytes=50MB        ;日志文件大小,超出会rotate,默认 50MB,如果设成0,表示不限制大小
logfile_backups=10           ;日志文件保留备份数量默认10,设为0表示不备份
loglevel=info                ;日志级别,默认info,其它: debug,warn,trace
pidfile=/tmp/supervisord.pid ;pid 文件
nodaemon=false               ;是否在前台启动,默认是false,即以 daemon 的方式启动
minfds=1024                  ;可以打开的文件描述符的最小值,默认 1024
minprocs=200                 ;可以打开的进程数的最小值,默认 200

[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ;通过UNIX socket连接supervisord,路径与unix_http_server部分的file一致
;serverurl=http://127.0.0.1:9001 ; 通过HTTP的方式连接supervisord
  1. 启动 supervisord
# systemctl daemon-reload
# systemctl enable supervisord.service
# systemctl restart supervisord.service

添加 Program

 # cat /etc/supervisor.d/program_tail.conf
[program:tail]
command=sh -c "tail -F -q /var/log/messages"
stdout_logfile=/var/log/program_tail.log
stdout_logfile_maxbytes=128MB
stdout_logfile_backups=5
stderr_logfile=/var/log/program_tail.error
numprocs=1
autostart=true
autorestart=false
startsecs=3
stopsignal=INT
stopasgroup=true
killasgroup=true
stopwaitsecs=10
directory=/etc
user=nobody
priority=999
; [program:xx]是被管理的进程配置参数,xx是进程的名称
[program:xx]
command=sh -c "tail -F -q /var/log/messages"    ; 程序启动命令
autostart=true                                  ; 在supervisord启动的时候也自动启动
startsecs=10                                    ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒
autorestart=true                                ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启
startretries=3                  ; 启动失败自动重试次数,默认是3
user=tomcat                     ; 用哪个用户启动进程,默认是root
priority=999                    ; 进程启动优先级,默认999,值小的优先启动
stopwaitsecs=10               ; stop 等待多长时间, 超过后发送 SIGKILL 信号
redirect_stderr=true            ; 把stderr重定向到stdout,默认false
stdout_logfile_maxbytes = 20MB  ; stdout 日志文件大小,默认50MB
stdout_logfile_backups = 20     ; stdout 日志文件备份数,默认是10
stdout_logfile=/var/log/program_tail.log
stopasgroup=false               ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
killasgroup=false               ;默认为false,向进程组发送kill信号,包括子进程

supervisorctl update tail 启动 tail 服务

supervisorctl 命令

  1. 查看帮助
    help
    help

  2. 关闭supervisord
    shutdown

  3. 重载配置文件并重启supervisord和program
    reload

  4. 读取当前运行配置和program配置文件的差异
    reread

  5. 重载配置文件并重启受影响的program
    update

  6. 重启program(不会重载配置文件)
    restart
    restart
    restart all

  7. 清空program日志
    clear
    clear
    clear all

  8. 前台显示program(Ctrl+C退出)
    fg

  9. 显示supervisord或program ID
    pid
    pid
    pid all

  10. 启动program
    start
    start
    start all

  11. 停止program
    stop
    stop
    stop all

  12. 查看program状态
    status
    status
    status

  13. 输出program最新日志(默认stdout,Ctrl+C退出)
    tail [-f] [stdout|stderr] (default stdout)

  14. 输出supervisord最新日志(Ctrl+C退出)
    maintail [-f]

转载请注明:爱开源 » Supervisord 进程管理工具

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址