Python进程管理神器Supervisor详解

作者:大数据技术派 时间:2023-01-19 00:57:19 

一、简介

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

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

  • 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

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>

欢迎访问我的个人博客,听听我的故事。

来源:https://www.cnblogs.com/data-magnifier/p/16476920.html

标签:Python,Supervisor,进程管理
0
投稿

猜你喜欢

  • Python自动化测试PO模型封装过程详解

    2023-08-23 18:59:49
  • python itertools包内置无限迭代器

    2023-11-16 18:58:59
  • 利用numpy+matplotlib绘图的基本操作教程

    2021-01-26 11:14:31
  • SQL Server中带有OUTPUT子句的INSERT,DELETE,UPDATE应用

    2024-01-14 02:58:03
  • tensorflow建立一个简单的神经网络的方法

    2022-09-27 17:01:51
  • Python编程实现的简单神经网络算法示例

    2022-01-06 05:53:17
  • 从零开始做一个pagination分页组件

    2024-04-29 13:25:13
  • 网页栅格系统研究:960的秘密

    2008-10-24 17:03:00
  • HTML5 Canvas 起步(1) - 基本概念

    2009-04-21 13:14:00
  • 如何避免mysql启动时错误及sock文件作用分析

    2024-01-16 18:39:01
  • 对python中的logger模块全面讲解

    2021-01-17 00:49:17
  • 详解Oracle 中实现数据透视表的几种方法

    2023-07-24 03:45:04
  • Python实现程序判断季节的代码示例

    2022-04-04 13:30:22
  • Python使用selenium + headless chrome获取网页内容的方法示例

    2023-05-02 05:27:37
  • 基于进程内通讯的python聊天室实现方法

    2021-01-24 03:50:53
  • JavaScript实现涂鸦笔功能

    2024-04-10 11:01:01
  • Python中的sort()方法使用基础教程

    2022-03-07 21:44:09
  • Python实现简单生成验证码功能【基于random模块】

    2022-12-10 18:19:58
  • GC与JS内存泄露

    2010-09-25 19:01:00
  • python opencv设置摄像头分辨率以及各个参数的方法

    2021-03-05 00:23:34
  • asp之家 网络编程 m.aspxhome.com