【Python】supervisor 工具介绍
Supervisor 是一款基于Python的进程管理工具,可以很方便的管理服务器上部署的应用程序。supervisor是C/S模型的程序,其server端是supervisord 服务,client 端是supervisorctl 命令 。
Supervisor的功能如下:
1 启动、重启、关闭包括但不限于python进程。
2 查看进程的运行状态。
3 批量维护多个进程。
思考一下当应用服务器要部署多个服务程序,机器关闭,重启,如何批量维护?此时supervisor是一个不错的选择。可以用 supervisor 同时启动所有应用程序而不用逐个启动。
二 如何安装配置
2.1 安装步骤请移步 官方文档 本文主要介绍如何配置和常用的命令
2.2 supervisor的配置
supervisor启动的时候如果没有加上-c参数,则会使用默认的配置文件启动,supervisor会按照如下顺序去寻找默认配置文件:
- $CWD/supervisord.conf
- $CWD/etc/supervisord.conf
- /etc/supervisord.conf
$CWD表示当前的工作目录,上面三个路径从上到下优先级递减,也就是说supervosir会优先去检查$CWD/supervisord.conf文件是否存在,存在就使用该文件启动supervisor,否则向下继续检查。
当然我们也可以使用如下命令生成配置文件:
- echo_supervisord_conf > /etc/supervisord.conf
配置文件内如参考如下
- [rpcinterface:supervisor]
- supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
- [unix_http_server]
- file=/tmp/supervisor.sock ; supervisord 服务进程的sock文件
- [supervisord]
- logfile=/data/logs/supervisord/supervisord.log ; 日志文件,默认是 $CWD/supervisord.log
- logfile_maxbytes=50MB ; 日志文件大小,超出50MB会做轮转,默认为50MB
- logfile_backups=10 ; 日志文件保留备份数量
- loglevel=info ; 日志级别,默认 info,其它: debug,warn,trace
- pidfile=/var/run/supervisord.pid ; pid 文件
- nodaemon=false ; 是否在前台启动,默认是 false,即以 daemon 的方式启动
- minfds=10240 ; 可以打开的文件描述符的最小值,默认 1024
- minprocs=200 ; 可以打开的进程数的最小值,默认 200
- #### ###
- [supervisorctl]
- serverurl = unix:///tmp/supervisor.sock
- [include]
- files = /etc/supervisord.d/*.conf ;包含需要管理的应用程序的配置文件
我们把文件内容分成两块
1 supervisord自身的配置项内容
2 需要管理的应用程程序的配置,在[include]里面
2.3 应用程序的cnf文件配置信息
应用程序的配置文件格式
应用程序的配置文件格式需要[program:PROGRAM_NAME] 部分的配置,PROGRAM_NAME表示 supervisord 要管理那个进程描述,会在客户端supervisorctl 或 web 界面显示,可以通过 supervisorctl start|restart|stop PROGRAM_NAME 来操作维护该进程。
- [program:PROGRAM_NAME]
- 属性1=参数1
- ....
- 属性N=参数N
举个例子: 通过supervisor 管理haunt程序
- [program:haunt]
- directory = /opt/haunt_agent ; 程序的启动目录
- command= /opt/haunt_agent/bin/haunt_agent -c /opt/haunt_agent/conf/haunt_agent.ini; 启动haunt程序的命令,与手动启动的命令一致
- autostart = true ;在 supervisord 启动的时候也自动启动
- startsecs = 5 ;启动 5 秒后没有异常退出,就当作已经正常启动了
- autorestart = true ;程序异常退出后自动重启
- startretries = 3 ; 启动失败自动重试次数,默认是 3
- user = app ; 用哪个用户启动
- redirect_stderr = true ; 把 stderr 重定向到 stdout,默认 false
- stdout_logfile_maxbytes = 10MB ; stdout 日志文件大小,默认 20MB
- stdout_logfile_backups = 10 ; stdout 日志文件备份数
- stdout_logfile = /data/logs/supervisor/haunt_stdout.log; stdout日志文件,注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
- ; 可以通过 environment 来添加需要的环境变量,一种常见的用法是修改 PYTHONPATH
- ; environment=PYTHONPATH=$PYTHONPATH:/path/to/somewhere
三 常用的命令
3.1 启动supervisor
#明确指定配置文件
- supervisord -c /etc/supervisord.conf
如果以不指定配置文件启动,则会找默认文件
- supervisord
3.2 supervisorctl 命令介绍
supervisorctl 是supervisord的命令行客户端工具,启动时需要指定与supervisord使用同一份配置文件,否则与supervisord一样按照顺序查找配置文件。
supervisorctl -c /etc/supervisord.conf
进入命令行模式
- # supervisorctl
- SayHello EXITED Nov 02 11:27 PM
- sample RUNNING pid 10082, uptime 2:56:32
- hawk_agent:hawk_agent-1 RUNNING pid 10084, uptime 2:56:32
- supervisor> status
- SayHello EXITED Nov 02 11:27 PM
- sample RUNNING pid 10082, uptime 2:56:35
- hawk_agent:hawk_agent-1 RUNNING pid 10084, uptime 2:56:35
- supervisor> reload
- Really restart the remote supervisord process y/N? y
- Restarted supervisord
- supervisor>
- supervisor> status
- SayHello RUNNING pid 4359, uptime 0:00:02
- sample RUNNING pid 4358, uptime 0:00:02
- yz-hawk_agent:yz-hawk_agent-1 RUNNING pid 4360, uptime 0:00:02
常用的命令介绍:
# 停止某一个进程,program_name 为 配置文件中[program:x] 里的 x
supervisorctl stop program_name
# 启动某个进程
supervisorctl start program_name
# 重启某个进程
supervisorctl restart program_name
# 结束所有属于名为 groupworker 这个分组的进程 (start,restart 同理)
supervisorctl stop groupworker:
# 结束 groupworker:name1 这个进程 (start,restart 同理)
supervisorctl stop groupworker:name1
# 停止全部进程,注:start、restart、stop 都不会载入最新的配置文件
supervisorctl stop all
# 载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程,相当于重启所有的服务,该命令慎用
supervisorctl reload
# 根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启
supervisorctl update
3.3 支持以 group 的方式来管理多个进程
supervisor 可以将多个应用程序以group的方式管理。
- [group:GROUP_NAME]
- programs=prog_name1,prog_name2 ; each refers to 'x' in [program:x] definitions
- priority=999 ; the relative start priority (default 999)
使用group配置之后,使用supervisorctl 管理进程的时候,变为管理group组内所有的程序
- supervisorctl [start|restart|stop|reload] GROUP_NAME
- 管理单个应用程序
- supervisorctl [start|restart|stop|reload] GROUP_NAME:prog_name1
- supervisorctl [start|restart|stop|reload] GROUP_NAME:prog_name2
如果你的应用程序比较多而且部分应用程序有关联性,可以使用group的方式,但是如果每个应用程序相互独立且不耦合,推荐使用
“分而治之”的思路,每个应用程序单独一个。这样运维应用程序的时候 更方便简单。
四 参考文章
[1] Python 进程管理工具 Supervisor 使用教程
[2] 官方文档
【Python】supervisor 工具介绍相关推荐
- python编程工具-7款Python开发工具介绍,你最中意哪一款
工欲善其事必先利其器,有一款好用上手的Python编辑器能够大大提高码代码的效率,而且所带来的提升不是从 1 到 1.1 倍速,是从 1 到 10 倍速.所以行哥这里来推荐几个常用的Python开发工 ...
- 零基础Python完全自学教程3:Python开发工具介绍
欢迎你来到站长在线的站长学堂学习Python课程.今天<零基础Python完全自学教程>分享的主题是<Python开发工具介绍>. 作为一个Python程序员需要对一些常用的P ...
- Python学习--工具介绍
Python学习入门–工具介绍 工欲善其事,必先利其器 在上一篇文章里我们介绍了Python的环境搭建,这篇文章给大家介绍几个用于编写python的工具(Windows平台). IDLE 当我们安装完 ...
- [python] 基础工具介绍好文推荐
Github上有个哥们写的,还不错,mark一下: https://github.com/lijin-THU/notes-python/blob/master/index.ipynb 相对全面的介绍了 ...
- Python开发工具的七种“工具”的介绍
原文地址为: Python开发工具的七种"工具"的介绍 本文主要是对Python开发工具的七种介绍,其中包括, IDLE. BlackAdder.PythonWorks.Wing ...
- arcgis python工具-使用python制作ArcGIS插件(1)工具介绍
使用python制作ArcGIS插件(1)工具介绍 by 李远祥 ArcGIS从10.0开始支持addin(ArcGIS软件中又叫作加载项)的方式进行插件制作.相对于以往9.x系列,addin的无论是 ...
- python接口自动化(四)--接口测试工具介绍(详解)
简介 "工欲善其事必先利其器",通过前边几篇文章的介绍,大家大致对接口有了进一步的认识.那么接下来让我们看看接口测试的工具有哪些. 目前,市场上有很多支持接口测试的工具.利用工具进 ...
- python版本管理工具_Python版本管理工具与虚拟环境的介绍
这里简单的介绍一下Python版本管理工具--pyenv和三个个虚拟环境,分别是virtualenv,anconda,pipenv. 版本管理工具--pyenv 这个呢是一个python版本管理的包, ...
- 使用python制作ArcGIS插件(1)工具介绍
使用python制作ArcGIS插件(1)工具介绍 by 李远祥 ArcGIS从10.0开始支持addin(ArcGIS软件中又叫作加载项)的方式进行插件制作.相对于以往9.x系列,addin的无论是 ...
最新文章
- android 带记忆功能的播放器源码,Android实现阅读进度记忆功能
- spark streaming 消费 kafka入门采坑解决过程
- 第七章 配置文件与网站部署
- JavaScript 清除图片背景颜色 使之透明
- 【Git、GitHub、GitLab】一 Git安装与Git最小配置
- Spring MVC学习总结(5)——SpringMVC项目关于安全的一些配置与实现方式
- linux下使用source /etc/profile保存配置后,新的环境变量只能在一个终端里面有效...
- A - 加农炮(线段树)单点更新
- Java中parseInt()和valueOf(),toString()的区别
- 【1】Python 视频文字识别提取 - Mp4转换成Mp3
- AppleALC.kext驱动支持的硬件型号与ID速查列表:
- win10录屏_关于使用Win10自带录屏工具小技巧
- pythonai人脸识别_AI的强大!用Python实现一个简单的人脸识别
- 你很牛,且是刚毕业的,那就到华为上班吧!--绝对隐私:华为员工待遇全面揭秘
- 网易云课堂 计算机入门 期末 编程题
- 牛客 小米校招 计算题 单调栈 接雨水
- 《TCP_IP详解卷一:协议》思维导图
- ORB-SLAM3相对于ORB-SLAM2有哪些优势?
- hive 使用regexp筛选和替代特殊字符
- feshshop centos 镜像
热门文章
- 揭秘2018图灵奖评选:Jeff Dean李开复和Lecun写信推荐Hinton
- 中国成全球第二AI医疗交易国,上半年AI制药融资数等于去年全年 | 报告
- “让天下没有难开的店”,宣言来自无人车公司AutoX
- 高达大战分晓!日本机器人先赢后输,遭电锯切割惨惨惨 | 附高清完整视频
- 苹果appID的获取方法
- ubuntu18.04server 真机无法自动获取IP解决方法
- Linux驱动开发 -- 打开dev_dbg()
- Unable to run Kiwi tests on iOS8 device
- C++编程技术之 异常处理(上)
- 一. python的collections模块