Python进程管理神器Supervisor详解

 更新时间:2022年07月14日 11:29:34   作者:大数据技术派  
Supervisor 是一款 Python 开发的进程管理系统,允许用户监视和控制 Linux 上的进程,能将一个普通命令行进程变为后台守护进程,异常退出时能自动重启,这篇文章主要介绍了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

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>

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

到此这篇关于Python进程管理神器Supervisor的文章就介绍到这了,更多相关Python Supervisor进程管理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 如何利用python在剪贴板上读取/写入数据

    如何利用python在剪贴板上读取/写入数据

    说起处理数据就离不开导入导出,而我们使用Pandas时候最常用的就是read_excel、read_csv了,下面这篇文章主要给大家介绍了关于如何利用python在剪贴板上读取/写入数据的相关资料,需要的朋友可以参考下
    2022-07-07
  • Python中多线程的创建及基本调用方法

    Python中多线程的创建及基本调用方法

    由于注明的GIL的存在,Python尽管能创建多个线程,但是多线程却不能同时工作...well,这里我们来看一下Python中多线程的创建及基本调用方法
    2016-07-07
  • Python实战之手写一个搜索引擎

    Python实战之手写一个搜索引擎

    这篇文章主要介绍了Python实战之手写一个搜索引擎,文中有非常详细的代码示例,对正在学习python的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-04-04
  • python tkinter库实现气泡屏保和锁屏

    python tkinter库实现气泡屏保和锁屏

    这篇文章主要为大家详细介绍了python tkinter库实现气泡屏保和锁屏,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • Python使用Rich实现美化终端显示效果

    Python使用Rich实现美化终端显示效果

    Rich库的功能就像它的名字一样,使Python编程更加丰富(rich),用来帮助开发者在控制台(命令行)输出中创建丰富、多彩和具有格式化的文本,下面我们就来了解下它的具体使用吧
    2024-02-02
  • Python中的lstrip()方法使用简介

    Python中的lstrip()方法使用简介

    这篇文章主要介绍了Python中的lstrip()方法使用简介,是Python入门的基础知识,需要的朋友可以参考下
    2015-05-05
  • Python实现打印金字塔图案的方法详解

    Python实现打印金字塔图案的方法详解

    使用简单的 for 循环在 python 中打印模式。第一个外循环用于处理行数, 而内嵌套循环用于处理列数。操作打印语句,可以打印不同的数字图案、字母图案或星形图案。本文将利用这些方法实现打印金字塔图案,需要的可以参考一下
    2022-09-09
  • python 实现语音聊天机器人的示例代码

    python 实现语音聊天机器人的示例代码

    这篇文章主要介绍了python 实现语音聊天机器人的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • Tensorflow训练模型越来越慢的2种解决方案

    Tensorflow训练模型越来越慢的2种解决方案

    今天小编就为大家分享一篇Tensorflow训练模型越来越慢的2种解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • 解决Jupyter notebook更换主题工具栏被隐藏及添加目录生成插件问题

    解决Jupyter notebook更换主题工具栏被隐藏及添加目录生成插件问题

    这篇文章主要介绍了解决Jupyter notebook更换主题工具栏被隐藏及添加目录生成插件问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04

最新评论