• 技术文章 >后端开发 >Python教程

    带你了解Python进程管理神器Supervisor

    长期闲置长期闲置2022-07-28 15:34:46转载142
    本篇文章给大家带来了关于Python的相关知识,Supervisor 是一款 Python 开发的进程管理系统,允许用户监视和控制 Linux 上的进程,能将一个普通命令行进程变为后台守护进程,异常退出时能自动重启,下面一起来看一下,希望对大家有帮助。

    【相关推荐:Python3视频教程

    一、简介

    Supervisor 是一款 Python 开发的进程管理系统,允许用户监视和控制 Linux 上的进程,能将一个普通命令行进程变为后台守护进程,异常退出时能自动重启

    二、安装

    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

    将最后一部分改为

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

    四、初试

    1.启动 supervisord

    supervisord -c supervisord/supervisord.conf

    这样就把supervisord启动了,我们接下来可以把我们的任务交给他去守护了,停止了会帮我们自动重启。

    查看版本

    supervisord -v

    2.编写简单的 Shell 脚本

    vim supervisord/test.sh

    内容如下

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

    简单运行,Ctrl + C 退出

    3.创建子进程配置文件

    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个参数,其它不用管:

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

    yum install tree
    tree supervisord
    
    supervisord
    ├── conf.d
    │   └── test.conf
    ├── supervisord.conf
    └── test.sh

    4.重新读取配置并更新子进程

    因为我们的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>

    【相关推荐:Python3视频教程

    以上就是带你了解Python进程管理神器Supervisor的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:脚本之家,如有侵犯,请联系admin@php.cn删除
    专题推荐:python
    上一篇:Python的functools模块使用总结 下一篇:Python pygame入门基础教程
    VIP课程(WEB全栈开发)

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• Python爬虫超详细讲解• 实例分享8个Python自动化脚本• Python解析参数的三种方法详解• 完全掌握Python中的双下方法• python正则表达式如何实现重叠匹配
    1/1

    PHP中文网