等待下一个秋

  • Spark
  • Flink
  • Hive
  • 数据仓库
  • 资料文档
  • Java
    • Spring
    • Mybatis
    • SpringBoot
    • 面试题
  • Python
    • Python基础
    • 爬虫
    • Numpy
    • matplotlib
    • Flask
  • 知识星球
  • 副业挣钱
  • 技术杂谈
    • Linux知识
    • Docker
    • Git教程
    • Redis教程
    • mysql
    • 前端
    • R语言
    • 机器学习
  • 其它
    • 关于我
    • 资料下载
    • 收徒弟
专注于Hadoop/Spark/Flink/Hive/数据仓库等
关注公众号:大数据技术派,获取更多学习资料。
  1. 首页
  2. Python
  3. 正文

Python进程管理——Supervisor

2022年7月5日 155点热度 0人点赞 0条评论

一、简介

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
  1. 编写简单的 Shell 脚本

    vim supervisord/test.sh

    内容如下

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

    简单运行,Ctrl + C 退出

  2. 创建子进程配置文件

    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
  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>
标签: Python
最后更新:2022年7月19日

等待下一个秋

待我代码写成,便娶你为妻!专注于Hadoop/Spark/Flink/Hive/数据仓库等,关注公众号:大数据技术派,获取更多学习资料。

打赏 点赞
< 上一篇
下一篇 >

文章评论

取消回复

等待下一个秋

待我代码写成,便娶你为妻!专注于Hadoop/Spark/Flink/Hive/数据仓库等,关注公众号:大数据技术派,获取更多学习资料。

搜一搜
微信
最新 热点 随机
最新 热点 随机
logstash同步mysql数据到elasticsearch Spring IOC 容器源码分析 elasticsearch修改字段类型 curl操作elasticsearch常用命令 Python通过orm操作mysql数据库 Python进程管理——Supervisor
Spring IOC 容器源码分析logstash同步mysql数据到elasticsearch
Windows10总是自动切换为繁体 Redis 键(key) Hive的安装 Flink on Yarn安装 MySQL WHERE子句使用实例讲解 markdown入门教程
标签聚合
数据仓库 mysql 书籍 算法 大数据 Java Python Redis Flink 挣钱 R语言 Hive
文章归档
  • 2022年7月
  • 2022年6月
  • 2022年5月
  • 2022年4月
  • 2022年3月
  • 2022年2月
  • 2022年1月
  • 2021年12月
  • 2021年11月
  • 2021年10月
  • 2021年9月
  • 2021年8月
  • 2021年6月
  • 2021年5月
  • 2021年4月
  • 2021年3月
  • 2021年2月
  • 2021年1月
  • 2020年12月
  • 2020年11月
  • 2020年10月
  • 2020年9月
  • 2020年8月
  • 2020年7月
  • 2020年5月
  • 2020年4月
  • 2020年1月
  • 2019年9月
  • 2019年8月
  • 2019年7月
  • 2019年6月
  • 2019年5月
  • 2019年4月
  • 2019年3月
  • 2019年1月
  • 2018年12月
  • 2017年5月

©2022 ikeguang.com. 保留所有权利。

鄂ICP备2020019097号-1

鄂公网安备 42032202000160号