乐趣区

关于python:Python进程管理神器Supervisor

这是我的集体博客地址。

一、简介

Supervisor 是一款 Python 开发的过程管理系统,容许用户监督和管制 Linux 上的过程,能将一个一般命令行过程变为后盾守护过程,异样退出时能主动重启
具体介绍查阅:Supervisor Introduction

二、装置

Supervisor 反对 Linux 和 Mac,不反对 Windows
本文零碎为:centos,supervisor==4.2.4

pip3 install supervisor

装置实现后,在 Python bin 目录 上面会有这样几个文件。

ls /usr/local/Python38/bin

echo_supervisord_conf
supervisorctl
supervisord

:因为 python bin 目录是退出了环境变量,所以能够间接执行这几个文件。

三、创立配置文件

  1. 首先建个目录,寄存配置文件:mkdir supervisord

    echo_supervisord_conf > supervisord/supervisord.conf

    若报错 -bash: /etc/supervisord.conf: Permission denied,须要切换到 root 用户。

  2. 创立子过程配置文件门路

    mkdir -p supervisor/conf.d

    前面咱们的工作,咱们想把它作为守护过程,都须要一个配置文件,咱们把这些配置文件放在 conf.d 目录上面。

  3. 批改配置文件

    vim supervisord/supervisord.conf

    将最初一部分改为

    [include]
    # 因为我这里是放在 root 用户目录下,也能够放其它目录
    files=/root/supervisord/conf.d/*.conf

四、初试

  1. 启动 supervisord

    supervisord -c supervisord/supervisord.conf

    这样就把 supervisord 启动了,咱们接下来能够把咱们的工作交给他去守护了,进行了会帮咱们主动重启。

查看版本

supervisord -v
  1. 编写简略的 Shell 脚本

    vim supervisord/test.sh

    内容如下

    #!/bin/bash
    while : 
    do
     echo `date '+%Y-%m-%d %H:%m:%S'`
     sleep 1
    done

    简略运行,Ctrl + C 退出

  2. 创立子过程配置文件

    vim supervisor/conf.d/test.conf

    test.conf内容如下:

    [program:test]
    command=sh /root/supervisord/test.sh
    priority=999                              ; 绝对启动优先级,数值越小越优先,默认为 999
    autostart=true                            ; 在 supervisor 启动时主动启动,默认为 true
    autorestart=true                          ; 在意外退出时重新启动,默认为 true
    startsecs=10                              ; 子过程启动多少秒后状态为 running 则认为启动胜利,默认为 1
    startretries=3                            ; 尝试启动的最大次数,默认为 3
    exitcodes=0,2                             ; 过程的预期退出代码列表,默认为 0
    stopsignal=QUIT                           ; 终止过程的信号,默认为 TERM
    stopwaitsecs=10                           ; 在 SIGKILL 之前期待的最大秒数,默认为 10
    user=root                                 ; 在某用户下设置 uid 来启动程序,默认不切换用户
    redirect_stderr=true                      ; 是否重定向 stdout 和 stderr,默认为 false
    stdout_logfile=/tmp/supervisor.stdout.log  ; stdout 的输入文件,默认为 AUTO
    stdout_logfile_maxbytes=50MB              ; stdout 最大文件大小,默认为 50MB
    stdout_logfile_backups=10                 ; stdout 文件备份数,设为 0 则不备份,默认为 10

其实只须要配置 3 个参数,其它不必管:

  • command=sh /root/supervisord/test.sh:咱们的子过程启动命令;
  • stdout_logfile=/tmp/supervisor.stdout.log: 日志;
  • program:test:过程名为test,如果过程哪一天想进行启动等,须要过程名;

目前文件目录构造是这样的:

yum install tree
tree supervisord

supervisord
├── conf.d
│   └── test.conf
├── supervisord.conf
└── test.sh
  1. 从新读取配置并更新子过程

因为咱们的 supervisord 曾经启动了,能够通过 ps -ef | grep supervisord.conf 查看。增加了子过程配置文件,须要把它从新加载进来:

先进入 supervisord 目录: cd supervisord,否则执行上面命令会有问题。

supervisorctl reread

再次查看过程状态

supervisorctl status

后果:

test     RUNNING   pid 30278, uptime 1:29:41

名为 test 的这个过程曾经作为守护过程在后盾运行,咱们来 kill 掉他:

kill 30278

再执行 supervisorctl status,会发现状态立马由starting,不一会变成running,那么supervisord 的作用曾经很显著了,能够主动帮咱们主动监控工作。

:对于子过程的增加、删除、启动、进行相干命令,见附录。

五、Web 界面

web 界面没多大用处,就是如果想启动、暂停过程是,不须要敲命令而已。

vim supervisord.conf

勾销正文

[inet_http_server]
port=*:9001                ; 此处改为 * 便于调试

重启 supervisord

supervisorctl reload

浏览器拜访:linux_ip:9001.

附录:supervisorctl 常用命令

新增某配置文件,从新加载

supervisorctl reread

改变某配置文件,从新加载

supervisorctl update

重启 supervisord

supervisorctl reload

查看所有过程状态

supervisorctl status

查看指定过程状态

supervisorctl status <name>

启动所有子过程

supervisorctl start all

启动指定子过程

supervisorctl start <name>

重启所有子过程

supervisorctl restart all

重启指定子过程

supervisorctl restart <name>

进行所有子过程

supervisorctl stop all

进行指定子过程

supervisorctl stop <name>

增加子过程到过程组

supervisorctl add <name>

从过程组移除子过程,须要先 stop。留神:移除后,须要应用 reread 和 update 能力从新运行该过程

supervisorctl reomve <name>
退出移动版