美文网首页
Supervisor管理进程

Supervisor管理进程

作者: 喵帕斯0_0 | 来源:发表于2018-09-17 10:54 被阅读19次

    实际项目中,经常遇到需要管理进程的运行状态,在进程挂掉以后,系统能够自动重启进程,从而防止进程挂掉导致的服务不可用。Supervisor是一个运行与Liunx的进程监控工具,可以管理和监控Liunx上面的进程,并在进程异常退出后,重启进程,每一个Supervisor管理的进程都是其子进程,因此可以监控到进程的状态。

    官网:Supervisor

    Supervisor主要组件
    1. supervisord
      主进程,负责管理进程的server,其根据配置文件创建子进程,并对进程进行监控,负责对crash的进程进行重启,向子进程发出事件通知等。
    2. supervisorctl
      supervisor的命令行工具
    3. Web Server
      superviosr提供了web server功能,可通过web控制进程(需要设置[inethttpserver]配置项)
    4. XML-RPC Interface
      XML-RPC接口, 就像HTTP提供WEB UI一样,用来控制supervisor和由它运行的程序。
    安装及使用

    supervisor目前只支持python2

    1. 安装:pip install pip install supervisor
    2. 生成配置文件:echo_supervisord_conf > /etc/supervisord.conf
    3. 更改配置文件:vim /etc/supervisord.conf
    4. 启动:supervisorctl -c /etc/supervisord.conf
    supervisorctl命令

    supervisorctl helpsupervisorctl -h查看,此处仅列出主要功能

    1. supervisorctl -c/--configuration FILENAME:指定配置文件启动supervisor
    2. supervisorctl start [program name]/all:启动某个/全部进程
    3. supervisorctl restart [program name]/all:重启某个/全部进程
    4. supervisorctl reload:重启supervisor及其子进程
    5. supervisor update:更新配置,但不重启进程
    6. supervisor stop [program name]/all:停止某个/全部进程
    配置文件
    ;[program:theprogramname]    
    ;command=/bin/cat              ; 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) #随supervisor启动而启动
    ;startsecs=1                   ; # of secs prog must stay up to be running (def. 1)
    ;startretries=3                ; max # of serial start failures when starting (default 3) #启动重试次数
    ;autorestart=unexpected        ; when to restart if exited after running (def: unexpected)  #进程挂掉后是否重新启动,false:进程不会自动重启,unexpected:当程序退出时的退出码不是exitcodes中定义的时,进程会重启,true:进程会无条件重启当退出的时候
    ;exitcodes=0,2                 ; 'expected' exit codes used with autorestart (default 0,2)
    ;stopsignal=QUIT               ; signal used to kill process (default TERM)
    ;stopwaitsecs=10               ; max num secs to wait b4 SIGKILL (default 10)
    ;stopasgroup=false             ; send stop signal to the UNIX process group (default false)
    ;killasgroup=false             ; SIGKILL the UNIX process group (def false)
    ;user=chrism                   ; setuid to this UNIX account to run the program
    ;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 (0 means none, 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 (0 means none, 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) 
    

    示例:

    [program:test]
    command=/home/ubuntu/transfer/bin/python /home/ubuntu/transfer/test.py
    directory=/home/ubuntu/transfer
    autostart=true
    autorestart=true
    stdout_logfile=/home/ubuntu/transfer/test.log
    stderr_logfile=/home/ubuntu/transfer/test.log
    
    集群管理

    supervisor本身不支持多机管理,但是可以通过其提供的xml-rpc进行二次开发用来支持多机管理

    开源组件:cesi

    相关文章

      网友评论

          本文标题:Supervisor管理进程

          本文链接:https://www.haomeiwen.com/subject/fglknftx.html