【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会按照如下顺序去寻找默认配置文件:

  1. $CWD/supervisord.conf
  2. $CWD/etc/supervisord.conf
  3. /etc/supervisord.conf

$CWD表示当前的工作目录,上面三个路径从上到下优先级递减,也就是说supervosir会优先去检查$CWD/supervisord.conf文件是否存在,存在就使用该文件启动supervisor,否则向下继续检查。
当然我们也可以使用如下命令生成配置文件:

  1. echo_supervisord_conf > /etc/supervisord.conf

配置文件内如参考如下

  1. [rpcinterface:supervisor]
  2. supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
  3. [unix_http_server]
  4. file=/tmp/supervisor.sock ; supervisord 服务进程的sock文件
  5. [supervisord]
  6. logfile=/data/logs/supervisord/supervisord.log ; 日志文件,默认是 $CWD/supervisord.log
  7. logfile_maxbytes=50MB ; 日志文件大小,超出50MB会做轮转,默认为50MB
  8. logfile_backups=10 ; 日志文件保留备份数量
  9. loglevel=info ; 日志级别,默认 info,其它: debug,warn,trace
  10. pidfile=/var/run/supervisord.pid ; pid 文件
  11. nodaemon=false ; 是否在前台启动,默认是 false,即以 daemon 的方式启动
  12. minfds=10240 ; 可以打开的文件描述符的最小值,默认 1024
  13. minprocs=200 ; 可以打开的进程数的最小值,默认 200
  14. #### ###
  15. [supervisorctl]
  16. serverurl = unix:///tmp/supervisor.sock
  17. [include]
  18. 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 来操作维护该进程。

  1. [program:PROGRAM_NAME]
  2. 属性1=参数1
  3. ....
  4.  属性N=参数N

举个例子: 通过supervisor 管理haunt程序

  1. [program:haunt]
  2. directory = /opt/haunt_agent ; 程序的启动目录
  3. command= /opt/haunt_agent/bin/haunt_agent -c /opt/haunt_agent/conf/haunt_agent.ini; 启动haunt程序的命令,与手动启动的命令一致
  4. autostart = true    ;在 supervisord 启动的时候也自动启动
  5. startsecs = 5       ;启动 5 秒后没有异常退出,就当作已经正常启动了
  6. autorestart =  true ;程序异常退出后自动重启
  7. startretries = 3    ; 启动失败自动重试次数,默认是 3
  8. user = app          ; 用哪个用户启动
  9. redirect_stderr = true ; 把 stderr 重定向到 stdout,默认 false
  10. stdout_logfile_maxbytes = 10MB ; stdout 日志文件大小,默认 20MB
  11. stdout_logfile_backups = 10 ; stdout 日志文件备份数
  12. stdout_logfile = /data/logs/supervisor/haunt_stdout.log; stdout日志文件,注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
  13. ; 可以通过 environment 来添加需要的环境变量,一种常见的用法是修改 PYTHONPATH
  14. ; environment=PYTHONPATH=$PYTHONPATH:/path/to/somewhere

三 常用的命令
  3.1 启动supervisor
#明确指定配置文件

  1. supervisord -c /etc/supervisord.conf

如果以不指定配置文件启动,则会找默认文件

  1. supervisord

 3.2 supervisorctl 命令介绍
supervisorctl 是supervisord的命令行客户端工具,启动时需要指定与supervisord使用同一份配置文件,否则与supervisord一样按照顺序查找配置文件。
supervisorctl -c /etc/supervisord.conf
进入命令行模式

  1. # supervisorctl
  2. SayHello EXITED Nov 02 11:27 PM
  3. sample RUNNING pid 10082, uptime 2:56:32
  4. hawk_agent:hawk_agent-1 RUNNING pid 10084, uptime 2:56:32
  5. supervisor> status
  6. SayHello EXITED Nov 02 11:27 PM
  7. sample RUNNING pid 10082, uptime 2:56:35
  8. hawk_agent:hawk_agent-1 RUNNING pid 10084, uptime 2:56:35
  9. supervisor> reload
  10. Really restart the remote supervisord process y/N? y
  11. Restarted supervisord
  12. supervisor>
  13. supervisor> status
  14. SayHello RUNNING pid 4359, uptime 0:00:02
  15. sample RUNNING pid 4358, uptime 0:00:02
  16. 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的方式管理。

  1. [group:GROUP_NAME]
  2. programs=prog_name1,prog_name2 ; each refers to 'x' in [program:x] definitions
  3. priority=999 ; the relative start priority (default 999)

使用group配置之后,使用supervisorctl 管理进程的时候,变为管理group组内所有的程序

  1. supervisorctl [start|restart|stop|reload] GROUP_NAME
  2. 管理单个应用程序
  3. supervisorctl [start|restart|stop|reload] GROUP_NAME:prog_name1
  4. supervisorctl [start|restart|stop|reload] GROUP_NAME:prog_name2

如果你的应用程序比较多而且部分应用程序有关联性,可以使用group的方式,但是如果每个应用程序相互独立且不耦合,推荐使用
“分而治之”的思路,每个应用程序单独一个。这样运维应用程序的时候 更方便简单。

四 参考文章
[1]  Python 进程管理工具 Supervisor 使用教程
[2] 官方文档

时间: 2024-08-02 12:31:25

【Python】supervisor 工具介绍的相关文章

Python机器学习工具:Scikit-Learn介绍与实践

本文讲的是Python机器学习工具:Scikit-Learn介绍与实践, Scikit-learn官方的解释很简单: Machine Learning in Python, 用python来玩机器学习. 什么是机器学习 机器学习关注的是:计算机程序如何随着经验积累自动提高性能.而最大的吸引力在于,不需要写任何与问题相关的特定代码,泛型算法就能告诉你一些关于数据的秘密. Scikit-learn的优点 构建于现有的NumPy(基础n维数组包),SciPy(科学计算基础包), matplotlib(

Python 应用剖析工具介绍

[编者按]本文作者为来自 HumanGeo 的工程师 Davis,主要介绍了用于 Python 应用性能分析的几个工具.由国内 ITOM 管理平台 OneAPM 编译呈现. 在 HumanGeo,我们广泛使用 Python 进行编程,并且乐趣无穷.用 Python 写的程序不仅整洁美观,而且运行速度快得惊人.不论是私底下还是工作中,Python 都是笔者最爱的语言.然而,即便是 Python 这样美妙的语言,却也可能出现运行缓慢的情况.幸运的是,有许多不错的工具,可以帮助我们分析 Python

《Python数据分析与挖掘实战》一2.3 Python数据分析工具

2.3 Python数据分析工具 Python本身的数据分析功能不强,需要安装一些第三方扩展库来增强它的能力.本书用到的库有Numpy.Scipy.Matplotlib.Pandas.Scikit-Learn.Keras和Gensim等,下面将对这些库的安装和使用进行简单的介绍. 如果读者安装的是Anaconda发行版,那么它已经自带了以下库:Numpy.Scipy.Mat-plotlib.Pandas和Scikit-Learn. 本章主要是对这些库进行简单的介绍,在后面的章节中,会通过各种案例

Kali Linux中的十大WiFi攻击工具介绍

本文讲的是Kali Linux中的十大WiFi攻击工具介绍,在这十大WiFi攻击黑客工具中,我们将讨论一个非常受欢迎的主题:无线网络攻击以及如何防止黑客入侵.无线网络通常是网络的一个弱点,因为WiFi信号可以随处可见,任何人都可以使用.还有很多路由器包含漏洞,可以利用正确的设备和软件(如Kali Linux附带的工具)轻松利用漏洞.许多路由器制造商和ISP仍然默认在其路由器上启用了WPS,这使得无线安全和渗透测试变得更加重要.通过以下十大无线网络黑客工具,你可以测试我们自己的无线网络以获取潜在的

Linux集群和自动化维3.5 Python(x,y)介绍

3.5 Python(x,y)介绍 Python(x,y)是Windows下一个免费的科学和工程开发包,提供数学计算.数据分析和可视化展示.从名字 就能看出来这个发行版附带了科学计算方面的很多常用库,另外还有用于桌面软件界面制作的PyQt,以及 进行文档处理.生成EXE文件等的常用库.此外,它还包含了大量的工具,如IDE.制图制表的工具.加强 的互动Shell等.下文提到的很多软件在此发行版中都有附带.在其他方面,Python(x, y)还附带了手工整理 出的所有库的离线文档,每个小版本升级都提

MySQL数据导入导出方法与工具介绍(1- myslqimport utility)

mysql|数据             MySQL数据导入导出方法与工具介绍(1- myslqimport utility)              mysqlimport文本文件导入工具介绍 翻译声明:    本文内容来自Sam's Teach Yourself MySQL in 21 Days一书的部分内容,by Mark Maslakowski      英文原文版权属原作者所有,中文的部分翻译有略有增删;原书讲的过于清楚的地方有删,讲的不清楚的地方有增:如果有翻译的不妥或者不正确的地

MySQL数据导入导出方法与工具介绍(2-import from sql files)

mysql|数据    MySQL数据导入导出方法与工具介绍(2-import from sql files)          批处理导入文件,从sql文件导入数据到数据库中 翻译声明:    本文内容来自Sam's Teach Yourself MySQL in 21 Days一书的部分内容,by Mark Maslakowski    英文原文版权属原作者所有,中文的部分翻译有略有增删;原书讲的过于清楚的地方有删,讲的不清楚的地方有增:如果有翻译的不妥或者不正确的地方,请指正. 翻译者:D

MySQL数据导入导出方法与工具介绍(3-Exporting Data)

mysql|数据                MySQL数据导入导出方法与工具介绍(3-Exporting Data)                  导出数据的方法:Methods of Exporting Data 翻译声明:    本文内容来自Sam's Teach Yourself MySQL in 21 Days一书的部分内容,by Mark Maslakowski    英文原文版权属原作者所有,中文的部分翻译有略有增删;原书讲的过于清楚的地方有删,讲的不清楚的地方有增:如果有翻

工具介绍:使用CACTUSTORCH 生成Payload

本文讲的是工具介绍:使用CACTUSTORCH 生成Payload,CACTUSTORCH是一个生成payload的框架,可用于基于James Forshaw的DotNetToJScript工具的攻防对抗.这个工具允许C#二进制文件在payload内引导,提供可靠的手段绕过许多常见的防御. 目前CACTUSTORCH支持以下payload类型: VBS VBA JS JSE WSF HTA VBE 在此之前,我们是不能直接从不包括VBA宏多种格式中调用shellcode注入.CACTUSTORC