这是我的集体博客地址。

一、简介

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

二、装置

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

pip3 install supervisor

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

ls /usr/local/Python38/binecho_supervisord_confsupervisorctlsupervisord

:因为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/bashwhile : do echo `date '+%Y-%m-%d %H:%m:%S'` sleep 1done

    简略运行,Ctrl + C 退出

  2. 创立子过程配置文件

    vim supervisor/conf.d/test.conf

    test.conf内容如下:

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

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

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

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

yum install treetree supervisordsupervisord├── 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>