Python实现的进程管理神器——Supervisor

文章目录

  • 常用命令
  • 简介
  • 安装
  • 创建配置文件
  • 开机自启
  • 初试
  • Web 界面
  • 配置文件
  • 子进程配置模板
  • 可用变量
  • supervisorctl 命令
  • Supervisor 组件
  • 卸载
  • 遇到的坑
  • 参考文献

常用命令

修改配置并重启子进程

vim /etc/supervisor/conf.d/xxx.conf
supervisorctl reread
supervisorctl update
supervisorctl restart xxx
watch -n 1 "supervisorctl status"

查看进程状态

supervisorctl status

查看 supervisord 的进程

ps -ef | grep supervisord




简介

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

详细介绍查阅:Supervisor Introduction




安装

Supervisor 支持 Linux 和 Mac,不支持 Windows

本文系统为 Ubuntu,supervisor==4.2.4

pip3 install supervisor




创建配置文件

sudo echo_supervisord_conf > /etc/supervisord.conf

若报错 -bash: /etc/supervisord.conf: Permission denied,需要切换到 root

sudo su root

输出配置文件

cat /etc/supervisord.conf

创建子进程配置文件路径

mkdir -p /etc/supervisor/conf.d/

修改配置文件

sudo vim /etc/supervisord.conf

将最后一部分改为

[include]
files=/etc/supervisor/conf.d/*.conf

其余改成以下内容

[unix_http_server]
file=/var/run/supervisor.sock;
chmod=0777;  所有用户可操作[supervisord]
logfile=/var/log/supervisord.log;pidfile=/var/run/supervisord.pid;[supervisorctl]
serverurl=unix:///var/run/supervisor.sock;




开机自启

以 Ubuntu 为例

创建启动脚本

sudo curl https://raw.githubusercontent.com/Supervisor/initscripts/master/ubuntu > /etc/init.d/supervisord

添加执行权限

sudo chmod +x /etc/init.d/supervisord

查看 supervisord 的 pidfile 路径

which supervisord
which supervisorctl
cat /etc/supervisord.conf | grep logfile
cat /etc/supervisord.conf | grep pidfile
#  pidfile=/var/run/supervisord.pid;

修改启动脚本的变量 DAEMON、SUPERVISORCTL、LOGDIR、PIDFILE、DAEMON_OPTS 与上一致

sudo vim /etc/init.d/supervisord

DAEMON=/usr/local/bin/supervisord
SUPERVISORCTL=/usr/local/bin/supervisorctlLOGDIR=/var/log/supervisord.log
PIDFILE=/var/run/supervisord.pidDAEMON_OPTS="-c /etc/supervisord.conf $DAEMON_OPTS"

配置

sudo update-rc.d supervisord defaults
sudo service supervisord stop
sudo service supervisord start
systemctl status supervisord.service  # 查看服务状态





以 CentOS 为例

查看 supervisord 的位置,得到结果如 /usr/local/bin/supervisord

which supervisord

查看 supervisord 的位置,得到结果如 /usr/local/bin/supervisorctl

which supervisorctl

创建服务文件

sudo vim /usr/lib/systemd/system/supervisord.service

填入

[Unit]
Description=Supervisor daemon[Service]
Type=forking
ExecStart=/usr/local/bin/supervisord
ExecStop=/usr/local/bin/supervisorctl $OPTIONS shutdown
ExecReload=/usr/local/bin/supervisorctl $OPTIONS reload
KillMode=process
Restart=on-failure
RestartSec=42s[Install]
WantedBy=multi-user.target

查看是否已启动 supervisord,若已启动,杀进程

ps -ef | grep supervisord
supervisorctl stop all
kill -9 xxx

配置

sudo systemctl daemon-reload  # 重载系统管理配置
sudo systemctl enable supervisord  # 开机自启动
sudo systemctl start supervisord  # 启动服务
systemctl status supervisord  # 查看服务状态




初试

启动 supervisord

supervisord
或
supervisord -c /etc/supervisord.conf

查看版本

supervisord -v

查看进程状态(还没配程序,此时空输出)

supervisorctl status

编写简单的 Shell 脚本

vim /tmp/echo_time.sh

内容如下

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

简单运行,Ctrl + C 退出

sh /tmp/echo_time.sh

创建子进程配置文件

vim /etc/supervisor/conf.d/echo_time.conf

内容如下

[program:echo_time]                       ; 项目名
command=sh /tmp/echo_time.sh              ; 脚本执行命令
autostart=true                            ; 在supervisor启动时自动启动,默认为true
autorestart=true                          ; 在意外退出时重新启动,默认为unexpected
startsecs=10                              ; 子进程启动多少秒后状态为running则认为启动成功,默认为1
startretries=3                            ; 尝试启动的最大次数,默认为3
exitcodes=0                               ; 进程的预期退出代码列表,默认为0
stopsignal=QUIT                           ; 终止进程的信号,默认为TERM
stopwaitsecs=10                           ; 在SIGKILL之前等待的最大秒数,默认为10
user=root                                 ; 在某用户下设置uid来启动程序,默认不切换用户
redirect_stderr=true                      ; 是否合并stderr到stdout,默认为false
stdout_logfile=/tmp/echo_time.stdout.log  ; stdout的输出文件,默认为AUTO
stdout_logfile_maxbytes=50MB              ; stdout最大文件大小,默认为50MB
stdout_logfile_backups=10                 ; stdout文件备份数,设为0则不备份,默认为10

重新读取配置并更新子进程

supervisorctl reread
supervisorctl update

再次查看进程状态

supervisorctl status
watch -n 1 "supervisorctl status"

动态输出运行情况

tail -f /tmp/echo_time.stdout.log

效果




Web 界面

修改配置文件

sudo vim /etc/supervisord.conf

取消注释

[inet_http_server]
port=*:9001                ; 此处改为*便于调试

重启 supervisord

supervisorctl reload

查看本机 IP

hostname -I

访问 http://127.0.0.1:9001(把 127.0.0.1 改成上述 IP)




配置文件

服务器进程使用的配置文件一般为 /etc/supervisord.conf,格式为 Windows-INI

子进程配置文件在文件夹 /etc/supervisor/conf.d/,可通过上述配置文件的最后一行指定




子进程配置模板

[program:echo_time]                       ; 项目名
command=/Envs/xxx/bin/gunicorn -w 4 -b 127.0.0.1:5000 -k gevent main:app              ; 脚本执行命令
process_name=%(program_name)s             ; 进程名,默认为%(program_name)s,同项目名
numprocs=1                                ; 启动的程序实例数,默认为1
directory=/data/code/project              ; 脚本执行路径
umask=022                                 ; 进程掩码,默认无
priority=999                              ; 相对启动优先级,数值越小越优先,默认为999
autostart=true                            ; 在supervisor启动时自动启动,默认为true
autorestart=true                          ; 在意外退出时重新启动,默认为unexpected
startsecs=10                              ; 子进程启动多少秒后状态为running则认为启动成功,默认为1
startretries=3                            ; 尝试启动的最大次数,默认为3
exitcodes=0                               ; 进程的预期退出代码列表,默认为0
stopsignal=QUIT                           ; 终止进程的信号,默认为TERM
stopwaitsecs=10                           ; 在SIGKILL之前等待的最大秒数,默认为10
stopasgroup=false                         ; 是否把整个子进程的进程组停止,发送stop信号,默认为false
killasgroup=false                         ; 是否把整个子进程的进程组停止,发送kill信号,默认为false
user=root                                 ; 在某用户下设置uid来启动程序,默认不切换用户
redirect_stderr=true                      ; 是否合并stderr到stdout,默认为false
stdout_logfile=/tmp/echo_time.stdout.log  ; stdout的输出文件,默认为AUTO
stdout_logfile_maxbytes=50MB              ; stdout最大文件大小,默认为50MB
stdout_logfile_backups=10                 ; stdout文件备份数,设为0则不备份,默认为10
stdout_capture_maxbytes=1MB               ; capture管道大小,默认为0,关闭管道
stdout_events_enabled=false               ; 当进程写stdout时是否触发PROCESS_LOG_STDOUT事件,默认为false
stderr_logfile=/tmp/echo_time.stderr.log  ; stderr的输出文件,默认为AUTO
stderr_logfile_maxbytes=50MB              ; stderr最大文件大小,默认为50MB
stderr_logfile_backups=10                 ; stderr文件备份数,设为0则不备份,默认为10
stderr_capture_maxbytes=1MB               ; capture管道大小,默认为0,关闭管道
stderr_events_enabled=false               ; 当进程写stderr时是否触发PROCESS_LOG_STDERR事件,默认为false
environment=A="1",B="2"                   ; 环境变量,默认无
serverurl=AUTO                            ; 进入supervisord的URL,默认为AUTO

简化版

[program:echo_time]
command=/Envs/xxx/bin/gunicorn -w 4 -b 127.0.0.1:5000 -k gevent main:app
directory=/data/code/project
autorestart=true
startsecs=10
stopsignal=QUIT
user=root
redirect_stderr=true
stdout_logfile=/var/log/%(program_name)s.log
environment=A="1",B="2"stopasgroup=true

根据 Option to create directory of specified log files,不会自动创建日志目录,不存在的话会报错

TODO:`stdout_logfile` 可改为 ``,放在与项目同一目录下




可用变量

查看环境变量,含有的都可用

env

Supervisor 自带的变量

变量名含义
group_name
here配置文件目录
host_node_name
numprocs
process_num
program_name程序名




supervisorctl 命令

改动某配置文件,重载

supervisorctl update

新增某配置文件,重载

supervisorctl reread

重启 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>




Supervisor 组件

  • supervisord
    服务器部分称为 supervisord,负责启动子程序,响应客户端的命令,重新启动崩溃或退出的子进程,记录子进程的 stdout 和 stderr 输出等
    服务器进程使用的配置文件一般为 /etc/supervisord.conf,格式为 Windows-INI
    子进程配置文件在文件夹 /etc/supervisor/conf.d/
  • supervisorctl
    客户端命令行部分称为 supervisorctl ,可以连接到不同的 supervisord 进程,获取子进程状态,停止和启动子进程,以及获取一个正在运行的进程列表
  • Web Server
    可以通过浏览器访问 Web 用户界面进行 supervisorctl 操作
  • XML-RPC Interface
    可以通过接口 API 进行 supervisorctl 操作




卸载

dpkg -l | grep supervisor
sudo apt-get autoremove supervisor
sudo apt-get --purge remove supervisor
pip3 uninstall supervisor




遇到的坑

1. 启动时报错 Unlinking stale socket /tmp/supervisor.sock

杀掉进程,删除该文件,重新启动

sudo unlink /tmp/supervisor.sock
ps -ef | grep supervisord
kill 9 xxx

2. 报错 Error: Another program is already listening on a port that one of our HTTP servers is configured to use. Shut this program down first before starting supervisord.

杀掉进程,删除该文件,重新启动

sudo unlink /tmp/supervisor.sock
ps -ef | grep supervisord
kill 9 xxx

3. 普通用户 supervisorctl status 报错 error: <class ‘PermissionError’>, [Errno 13] Permission denied: file: /usr/local/lib/python3.8/site-packages/supervisor/xmlrpc.py line: 560

chmod 777 /tmp/supervisor.sock

4. Ubuntu 用 pip 安装找不到文件

把 supervisord 复制到 /usr/bin/ 目录下

或指定目录安装

pip3 install supervisor --install-option="--install-scripts=/usr/local/bin"

或全局安装(建议这种)

sudo -H pip3 install supervisor

5. 报错 unix:///tmp/supervisor.sock no such file

vim /etc/supervisord.conf

改成以下内容

[unix_http_server]
file=/var/run/supervisor.sock;[supervisord]
logfile=/var/log/supervisord.log;pidfile=/var/run/supervisord.pid;[supervisorctl]
serverurl=unix:///var/run/supervisor.sock;

6. 报错 unknown error making dispatchers for ‘xxx’: EACCES

日志文件夹缺少写权限

chmod -R 777 /var/log/




参考文献

  1. Supervisor Documentation
  2. Supervisor GitHub
  3. Python supervisor 强大的进程管理工具
  4. Supervisor使用教程
  5. Supervisor使用详解
  6. supervisor 使用小记(入门教程)
  7. supervisor常用命令
  8. supervisor 重载修改、新添加的配置文件
  9. 服务器安装配置supervisor
  10. another program is already listening on a port that one of our HTTP servers is configured to use
  11. 4种方法来在Linux系统中查看IP地址
  12. Permession denied error when use supervisorctl
  13. 解决unix:///tmp/supervisor.sock no such file的问题
  14. 解决unix:///tmp/supervisor.sock no such file的问题
  15. supervisor(一)基础篇
  16. Supervisor - Can’t start supervisorctl as root or user (User is set in config)
  17. ubuntu server 16.04: cannot get supervisor to start automatically
  18. supervisor和Python多进程multiprocessing使用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/351205.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Supervisor后台进程管理工具

Supervisor后台进程管理工具安装配置 一、安装及配置 1、Python liunx自带有了不需要安装&#xff08;没有的话需要安装&#xff09; 2、easy_install是setuptools包里带的一个命令 wget--no-check-certificate https://bootstrap.pypa.io/ez_setup.py -O - | sudo python 3、安…

Linux运维工具Supervisor(进程管理工具)

文章目录 一、介绍二、自带Web管理程序三、安装1、安装2、源码安装3、yum安装 四、配置文件五、启动六、设置开机启动七、查看 supervisord 是否在运行八、supervisorctl管理命令九、配置文件说明十、ini配置文件 举例说明十一、开启web页面管理程序十二、解决“unix:///tmp/su…

【Supervisor】Python 进程管理工具

Supervisor的安装配置与使用 一、简介 【1】Supervisor是Python开发的进程管理工具&#xff08;Client/Server系统&#xff09;&#xff0c;可以管理和监控Unix&#xff0c;Linux&#xff0c;Mac OS X 系统上的进程&#xff0c;无法运行在Windows上 【2】Supervisor官方版目前只…

Python supervisor 强大的进程管理工具

一、问题背景 1、背景 如何才能让一个进程摆脱终端&#xff0c;获得相对较长的生命周期&#xff1f; 2、后台(守护)、前台进程 什么是守护进程&#xff1f;通俗点讲就是后台跑着的进程&#xff0c;不会因为你关了终端服务就会随之停止&#xff0c;直到你把计算机的电源关闭…

进程管理工具supervisor的使用、常见报错问题处理

进程管理工具supervisor的使用、常见报错问题处理 1 安装2 简介2.1 supservisor自身提供三个命令&#xff1a;2.1.1 supervisorctl2.1.2 supervisord2.1.3 echo_supervisord_conf 2.2 配置文件2.3 重要事项2.4 查看supervisor的log日志 3 配置3.1 修改配置文件3.2 加载配置文件…

进程管理工具——Supervisord简介及安装

一、简介 Supervisor 是一个用 Python 写的进程管理工具&#xff0c;可以很方便的用来在 UNIX-like 系统&#xff08;不支持 Windows&#xff09;下启动、重启&#xff08;自动重启程序&#xff09;、关闭进程&#xff08;不仅仅是 Python 进程&#xff09; Supervisor 是一个 …

Supervisor进程管理详解

文章目录 1. supervisor简介2. supervisor安装2.1 安装方式2.2 验证 3. supervisor配置文件3.1 主配置文件3.2 子配置文件(program 配置)3.2.1 详细配置3.2.2 公司配置 4. 进程管理命令5. web管理&#xff08;不常用&#xff09;6. Supervisor配置systemctl服务7. Supervisor管…

Linux 中进程管理工具汇总

如果我们的Linux系统整个系统资源快要被耗尽时&#xff0c;我们是否能够找出那个最消耗系统资源的进程&#xff0c;然后删除该进程&#xff0c;让系统恢复正常呢&#xff0c;或者由于某个程序存在BUG&#xff0c;导致产生一系列的问题&#xff0c;有如何查找它并结束进程&#…

Supervisor安装与配置(Linux/Unix进程管理工具)

原文链接&#xff1a;http://blog.csdn.net/xyang81/article/details/51555473 Supervisor&#xff08;http://supervisord.org/&#xff09;是用Python开发的一个client/server服务&#xff0c;是Linux/Unix系统下的一个进程管理工具&#xff0c;不支持Windows系统。它可以很…

linux进程管理工具:supervisor

各种各样的程序运行情况中&#xff0c;或多或少都会有一些服务是用脚本跑起来的&#xff0c;我们通常的做法一般都是让其在后台运行&#xff0c;例如使用nohup&#xff0c;&等命令。 而这样的方法并不十分可靠&#xff0c;所以在这里推荐一个非常好用的进程管理工具&#x…

进程管理工具Supervisor

简介 Supervisor是一个客户端/服务器系统&#xff0c;允许用户在类UNIX操作系统上控制许多进程。它是基于python语言开发一个进程管理工具。 Supervisor的服务器端称为supervisord&#xff0c;主要负责在启动自身时启动管理的子进程&#xff0c;响应客户端的命令&#xff0c;重…

Supervisor 进程管理

一、简介 supervisor 是一个Python开发的、通用的进程管理程序。当程序中断时&#xff0c;supervisor能自动重启它&#xff0c;不再需要程序员或系统管理员自己编写代码来控制。 supervisor要求管理程序是非daemon程序&#xff0c;supervisor会把程序转成daemon程序&#xff0…

电脑技巧:进程管理工具Process Explorer介绍

目录 1、介绍 2、常用功能介绍 2.1 替代微软自带的任务管理器 2.2 查看当前系统中运行的进程 2.3 查看进程的详细信息 2.4 检索进程 2.5 监控操作系统的性能指标 2.6 获取Dump文件 2.7 进程操作功能 今天给大家推荐一款非常强大的进程管理工具Process Explorer&#xff0c;感兴…

进程管理工具

目录 一、进程管理工具(Supervisor) 简介 二、Supervisor安装与配置 介绍Supervisor 一、进程管理工具(Supervisor) 简介 Supervisor是用Python开发的一个client/server服务&#xff0c;是Linux/Unix系统下的一个进程管理工具&#xff0c;不支持Windows系统。它可以很方便的…

QLoRA:量化 LLM 的高效微调

此 repo 支持论文“QLoRA&#xff1a;量化 LLM 的高效微调”&#xff0c;旨在使对 LLM 研究的访问民主化。 QLoRA 使用bitsandbytes进行量化&#xff0c;并与 Hugging Face 的PEFT和transformers库集成。QLoRA 由华盛顿大学 UW NLP 小组的成员开发。 概述 我们介绍了 QLoRA&…

访问学者申请中4个难点解析

近年来&#xff0c;越来越多的学者希望通过申请成为访问学者来扩展他们的研究领域和学术交流。然而&#xff0c;访问学者申请过程中存在一些难点&#xff0c;下面知识人网来解析其中的4个难点。 首先&#xff0c;第一个难点是选择适合的研究机构。访问学者需要仔细考虑自己的研…

Fiddler抓包工具之高级工具栏中的Inspectors的使用

高级工具栏中的Inspectors的使用 Inspectors 页签允许你用多种不同格式查看每个请求和响应的内容。JPG 格式使用 ImageView 就可以看到图片&#xff0c;HTML/JS/CSS 使用 TextView 可以看到响应的内容。Raw标签可以查看原始的符合http标准的请求和响应头。Cookies标签可以看到…

人才“选用育留”难?做好这步,人力资源或许比你想象的更轻松

人才作为企业生存和发展最重要的资源之一&#xff0c;如何发现、使用、培养、留住优秀人才是所有企业人力资源管理的关键。但在实际场景当中&#xff0c;“招聘流程长造成人才流失”、“员工招聘不精准、效率低”、“员工培育周期长、成本高”、“优秀人才留不住”等问题正深深…

win10系统怎么安装显卡驱动,驱动人生详细教程

驱动人生的用户跟小编咨询说&#xff0c;windows10系统要怎么安装显卡驱动?或者win10怎样安装网卡驱动、声卡驱动等等驱动程序 其实是很简单的&#xff0c;下面小编在这里给大家介绍一下用驱动人生安装显卡驱动的具体步骤 1、打开**驱动人生**选择设备管理器&#xff0c;然后…

驱动人生解决“检测到你的驱动版本比较低”的问题

有驱动人生用户反应在电脑上用模拟器玩阴阳师游戏的时候被提示“检测到你的驱动版本比较低”&#xff0c;造成这个情况可能是电脑驱动没有更新或电脑没有达到阴阳师游戏的最低配置&#xff0c;驱动人生建议按照以下方法解决。 一&#xff1a;驱动没有更新的解决方案 驱动没有…