请选择 进入手机版 | 继续访问电脑版
查看: 139|回复: 0

Python进程管理神器Supervisor详解

[复制链接]

2198

主题

0

回帖

7027

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
7027
发表于 2022-10-9 01:25:06 | 显示全部楼层 |阅读模式
一、简介

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

二、安装

Supervisor 支持 Linux 和 Mac,不支持 Windows
本文系统为:
  1. centos,supervisor==4.2.4
复制代码
  1. pip3 install supervisor
复制代码
安装完成后,在Python
  1. bin目录
复制代码
下面会有这样几个文件。
  1. ls /usr/local/Python38/bin

  2. echo_supervisord_conf
  3. supervisorctl
  4. supervisord
复制代码
注:由于python bin目录是加入了环境变量,所以可以直接执行这几个文件。

三、创建配置文件

1.首先建个目录,存放配置文件:
  1. mkdir supervisord
复制代码
  1. echo_supervisord_conf > supervisord/supervisord.conf
复制代码
若报错 -bash: /etc/supervisord.conf: Permission denied,需要切换到 root用户。
2.创建子进程配置文件路径
  1. mkdir -p supervisor/conf.d
复制代码
后面我们的任务,我们想把它作为守护进程,都需要一个配置文件,我们把这些配置文件放在conf.d目录下面。
3.修改配置文件
  1. vim supervisord/supervisord.conf
复制代码
将最后一部门改为
  1. [include]
  2. # 因为我这里是放在root用户目录下,也可以放其它目录
  3. files=/root/supervisord/conf.d/*.conf
复制代码
四、初试

1.启动 supervisord
  1. supervisord -c supervisord/supervisord.conf
复制代码
这样就把
  1. supervisord
复制代码
启动了,我们接下来可以把我们的任务交给他去守护了,停止了会帮我们自动重启。
检察版本
  1. supervisord -v
复制代码
2.编写简单的 Shell 脚本
  1. vim supervisord/test.sh
复制代码
内容如下
  1. #!/bin/bash
  2. while :
  3. do
  4.     echo `date '+%Y-%m-%d %H:%m:%S'`
  5.     sleep 1
  6. done
复制代码
简单运行,
  1. Ctrl + C
复制代码
退出
3.创建子进程配置文件
  1. vim supervisor/conf.d/test.conf
复制代码
  1. test.conf
复制代码
内容如下:
  1. [program:test]
  2. command=sh /root/supervisord/test.sh
  3. priority=999                              ; 相对启动优先级,数值越小越优先,默认为999
  4. autostart=true                            ; 在supervisor启动时自动启动,默认为true
  5. autorestart=true                          ; 在意外退出时重新启动,默认为true
  6. startsecs=10                              ; 子进程启动多少秒后状态为running则认为启动成功,默认为1
  7. startretries=3                            ; 尝试启动的最大次数,默认为3
  8. exitcodes=0,2                             ; 进程的预期退出代码列表,默认为0
  9. stopsignal=QUIT                           ; 终止进程的信号,默认为TERM
  10. stopwaitsecs=10                           ; 在SIGKILL之前等待的最大秒数,默认为10
  11. user=root                                 ; 在某用户下设置uid来启动程序,默认不切换用户
  12. redirect_stderr=true                      ; 是否重定向stdout和stderr,默认为false
  13. stdout_logfile=/tmp/supervisor.stdout.log  ; stdout的输出文件,默认为AUTO
  14. stdout_logfile_maxbytes=50MB              ; stdout最大文件大小,默认为50MB
  15. stdout_logfile_backups=10                 ; stdout文件备份数,设为0则不备份,默认为10
复制代码
其实只需要配置3个参数,其它不消管:

    1. command=sh /root/supervisord/test.sh
    复制代码
    : 我们的子进程启动命令;
    1. stdout_logfile=/tmp/supervisor.stdout.log
    复制代码
    : 日志;
    1. program:test
    复制代码
    :进程名为
    1. test
    复制代码
    ,如果进程哪一天想停止启动等,需要进程名;
目前文件目录结构是这样的:
  1. yum install tree
  2. tree supervisord

  3. supervisord
  4. ├── conf.d
  5. │   └── test.conf
  6. ├── supervisord.conf
  7. └── test.sh
复制代码
4.重新读取配置并更新子进程
因为我们的
  1. supervisord
复制代码
已经启动了,可以通过
  1. ps -ef | grep supervisord.conf
复制代码
检察。添加了子进程配置文件,需要把它重新加载进来:
先进入
  1. supervisord
复制代码
目录:
  1. cd supervisord
复制代码
,否则执行下面命令会有问题。
  1. supervisorctl reread
复制代码
再次检察进程状态
  1. supervisorctl status
复制代码
结果:
  1. test     RUNNING   pid 30278, uptime 1:29:41
复制代码
名为
  1. test
复制代码
的这个进程已经作为守护进程在后台运行,我们来kill掉他:
  1. kill 30278
复制代码
再执行
  1. supervisorctl status
复制代码
,会发现状态立马由
  1. starting
复制代码
,不一会酿成
  1. running
复制代码
,那么
  1. supervisord
复制代码
的作用已经很明显了,可以自动帮我们自动监控任务。
注:对于子进程的添加、删除、启动、停止相关命令,见附录。

五、Web 界面

web界面没多大用处,就是如果想启动、暂停进程是,不需要敲命令而已。
  1. vim supervisord.conf
复制代码
取消注释
  1. [inet_http_server]
  2. port=*:9001                ; 此处改为*便于调试
复制代码
重启 supervisord
  1. supervisorctl reload
复制代码
浏览器访问:linux_ip:9001.

附录:supervisorctl 常用命令

新增某配置文件,重新加载
  1. supervisorctl reread
复制代码
改动某配置文件,重新加载
  1. supervisorctl update
复制代码
重启 supervisord
  1. supervisorctl reload
复制代码
检察所有进程状态
  1. supervisorctl status
复制代码
检察指定进程状态
  1. supervisorctl status <name>
复制代码
启动所有子进程
  1. supervisorctl start all
复制代码
启动指定子进程
  1. supervisorctl start <name>
复制代码
重启所有子进程
  1. supervisorctl restart all
复制代码
重启指定子进程
  1. supervisorctl restart <name>
复制代码
停止所有子进程
  1. supervisorctl stop all
复制代码
停止指定子进程
  1. supervisorctl stop <name>
复制代码
添加子进程到进程组
  1. supervisorctl add <name>
复制代码
从进程组移除子进程,需要先stop。注意:移除后,需要使用reread和update才气重新运行该进程
  1. supervisorctl reomve <name>
复制代码
欢迎访问我的个人博客,听听我的故事。
到此这篇关于Python进程管理神器Supervisor的文章就介绍到这了,更多相关Python Supervisor进程管理内容请搜索趣UU以前的文章或继续浏览下面的相关文章希望大家以后多多支持趣UU!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
打赏作者
  • 0
  • 0
  • 0
  • 0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表