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目录是加入了环境变量,所以可以直接执行这几个文件。
三、创建配置文件
- 首先建个目录,存放配置文件:
mkdir supervisord。
echo_supervisord_conf > supervisord/supervisord.conf
若报错 -bash: /etc/supervisord.conf: Permission denied,需要切换到 root用户。
- 创建子进程配置文件路径
mkdir -p supervisor/conf.d
后面我们的任务,我们想把它作为守护进程,都需要一个配置文件,我们把这些配置文件放在conf.d目录下面。
- 修改配置文件
vim supervisord/supervisord.conf
将最后一部分改为
[include]
# 因为我这里是放在root用户目录下,也可以放其它目录
files=/root/supervisord/conf.d/*.conf
四、初试
- 启动 supervisord
supervisord -c supervisord/supervisord.conf
这样就把supervisord启动了,我们接下来可以把我们的任务交给他去守护了,停止了会帮我们自动重启。
查看版本
supervisord -v
- 编写简单的 Shell 脚本
vim supervisord/test.sh
内容如下
#!/bin/bash
while :
do
echo `date '+%Y-%m-%d %H:%m:%S'`
sleep 1
done
简单运行,Ctrl + C 退出
- 创建子进程配置文件
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
- 重新读取配置并更新子进程
因为我们的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 使用教程
Supervisor 是基于 Python 的进程管理工具,只能运行在 Unix-Like 的系统上,也就是无法运行在 Windows 上.Supervisor 官方版目前只能运行在 Python 2 ...
- python进程管理工具Supervisor
一.Supervisor简单介绍 supervisor是一个 Client/Server模式的系统,允许用户在类unix操作系统上监视和控制多个进程,或者可以说是多个程序.supervisor与lau ...
- 进程管理工具supervisor
1. 简介 supervisor有两个组件:supervisord和supervisorctl,组成了client/server结构. supervisord负责读入配置文件,然后supervisor ...
- Linux进程管理工具Supervisor的安装配置
目录 Linux进程管理工具Supervisor的安装配置 简介 安装Python包管理工具 安装Supervisor 配置 配置文件参数说明 配置进程管理 启动supervisor 控制进程 交互终 ...
- supervisor - Python进程管理工具(转)
add by zhj: 下面是在ubuntu上的一些使用经验 1. 简介 supervisor有两个组件:supervisord和supervisorctl,组成了client/server结构. s ...
- supervisor - Python进程管理工具
经常会碰到要写一些守护进程,简单做法放入后台: shell> nohup python xxx.py & 偶尔这么做还可以接受,如果一堆这样的呢? 当然还有一个问题,就是各种服务,对应的 ...
- Linux进程管理工具——supervisor
介绍 Supervisord是用Python实现的一款非常实用的进程管理工具 安装 这里用源码 supervisor-.tar.gz .tar.gz cd supervisor- sudo pytho ...
- 进程管理工具Supervisor(一)简介与使用
Supervisor是用Python开发的一套client/server架构的进程管理程序,能做到开机启动,以daemon进程的方式运行程序,并可以监控进程状态等等. linux进程管理方式有传统的r ...
- linux 使用进程管理工具 supervisor
1.supervisor是使用python进行开发的运行在linux服务器上的进程管理工具 老版本的supervisor需要运行在python2环境,如果需要使用supervisor管理python3 ...
随机推荐
- 测试必会 Docker 实战(一):掌握高频命令,夯实内功基础
在 Dokcer 横空出世之前,应用打包一直是大部分研发团队的痛点.在工作中,面对多种服务,多个服务器,以及多种环境,如果还继续用传统的方式打包部署,会浪费大量时间精力. 在 Docker 出现后,它 ...
- 动手实操丨RC522射频卡模块与IC卡完成充值消费查询的技术实现思路
摘要:一文手把手教你利用RC522射频卡模块与IC卡完成充值消费查询的技术实现思路. 本文分享自华为云社区<RC522射频卡模块与IC卡完成充值消费查询的技术实现思路 ...
- HCNP Routing&Switching之RSTP保护
前文我们了解了RSTP相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16240348.html:今天我们来聊一聊RSTP保护相关话题: 我们知道RST ...
- 【深入理解计算机系统CSAPP】第六章 存储器层次结构
6 存储器层次结构 存储器系统(memory system)是一个具有不同容量.成本和访问时间的存储设备的层次结构.CPU 寄存器保存着最常用的数据.靠近 CPU 的小的.快速的高速缓存存储器(cac ...
- 【算法】桶排序(Bucket Sort)(九)
桶排序(Bucket Sort) 桶排序是计数排序的升级版.它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定.桶排序 (Bucket sort)的工作的原理:假设输入数据服从均匀分布,将 ...
- 796. Rotate String - LeetCode
Question 796. Rotate String Solution 题目大意:两个字符串匹配 思路:Brute Force Java实现: public boolean rotateString ...
- 103_Power Pivot 透视表中空白标签处理及百分比
焦棚子的文章目录 请点击下载附件 1.案例来源于不断变化的需求 事实表:销售表 维度表:城市表 销售表和城市建立多对一的关系 如图1: 图1 2.插入透视表 如图2: 图2 3.问题 1.销售表中,城 ...
- 推荐一款新框架PyScript:在 HTML 嵌入 Python 代码!
一.介绍 网页浏览器是目前世界上最普遍,最可携的计算机环境.几乎所有人都可以在计算机或是手机上使用网页浏览器,以没有基础设施障碍的方式访问程序. 在 PyCon US 2022 上,知名 Python ...
- 每天一个 HTTP 状态码 204
204 No Content 204 No Content 表示服务器成功地处理了客户端的请求,但是没有任何要响应的内容.API 设计上,在用 PUT 请求更新某个资源成功后,后端可以在 HTTP 响 ...
- CF1601F Two Sorts
CF1601F Two Sorts 给定 \(n\),将 \(1\sim n\) 按照字典序排序,\(a_i\) 表示第 \(i\) 小的数,求: \[\left(\sum_{i=1}^{n} ((i ...