【python】supervisor 工具介绍_itpub博客


本站和网页 http://blog.itpub.net/22664653/viewspace-2127559/ 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

【Python】supervisor 工具介绍_ITPUB博客
ITPub博客 首页 博客 专栏 学院 社区 技术栈 发博 > 应用开发 IT综合
【Python】supervisor 工具介绍
原创
作者:
杨奇龙
时间:2016-11-03 02:25:55
删除
编辑
一 简介
 
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
etc/supervisord
/etc/supervisord
$CWD表示当前的工作目录,上面三个路径从上到下优先级递减,也就是说supervosir会优先去检查$CWD/supervisord.conf文件是否存在,存在就使用该文件启动supervisor,否则向下继续检查。
当然我们也可以使用如下命令生成配置文件:
echo_supervisord_conf
>
配置文件内如参考如下
rpcinterface
supervisor
rpcinterface_factory
make_main_rpcinterface
unix_http_server
file
tmp/supervisor
sock
supervisord 服务进程的sock文件
logfile
/data/logs/supervisord/supervisord.log
日志文件,默认是 $
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
include
files
d/
包含需要管理的应用程序的配置文件
我们把文件内容分成两块
1  supervisord自身的配置项内容
2  需要管理的应用程程序的配置,在[include]里面
2.3 应用程序的cnf文件配置信息
应用程序的配置文件格式 
应用程序的配置文件格式需要
program
PROGRAM_NAME
部分的配置,
PROGRAM_NAME表示
 supervisord 要管理那个进程描述,
会在客户端supervisorctl 或 web 界面显示,可以通过 supervisorctl  start|restart|stop  
来操作维护该进程。
属性1
参数1
属性N
参数N
举个例子: 通过supervisor 管理haunt程序
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
stdout 日志文件备份数
stdout_logfile
/data/logs/supervisor/haunt_stdout
stdout日志文件,注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
可以通过 environment 来添加需要的环境变量,一种常见的用法是修改 PYTHONPATH
environment
PYTHONPATH
path/to/somewhere
三 常用的命令
3.1 启动supervisor
#明确指定配置文件
c /etc/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
pid 10084
status
35
reload
Really restart the remote supervisord process y/N
Restarted supervisord
pid 4359
uptime 0
00
02
pid 4358
yz
pid 4360
常用的命令介绍:
# 停止某一个进程,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
definitions
priority
999
the relative start priority
default 999
使用group配置之后,使用supervisorctl 管理进程的时候,变为管理group组内所有的程序
start
restart
stop
管理单个应用程序
如果你的应用程序比较多而且部分应用程序有关联性,可以使用group的方式,但是如果每个应用程序相互独立且不耦合,推荐使用
“分而治之”的思路,每个应用程序单独一个。这样运维应用程序的时候 更方便简单。
四 参考文章
[1]  
Python 进程管理工具 Supervisor 使用教程
[2]
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/22664653/viewspace-2127559/,如需转载,请注明出处,否则将追究法律责任。
分享到:
上一篇:
【Python】轻量级分布式任务调度系统-RQ
下一篇:
【Python】ConfigParser模块
请登录后发表评论
登录
全部评论
MySQL DBA
NoSQL
DEVOPS
注册时间:
2009-10-07
博文量
1026
访问量
8106920
最新文章
【Redis】获取没有设置ttl的key脚本
【MySQL】死锁案例之八
【MySQL】死锁案例之七
【MySQL】死锁案例之六
Redis 删除1.2亿指定前缀的key
开启自己的微信公众号了
【MySQL】漫谈死锁
【Python】python内置函数介绍
有赞MySQL自动化运维之路—ZanDB
【MySQL】如何阅读死锁日志
支持我们
作者招募
用户协议
FAQ
Contact Us
北京盛拓优讯信息技术有限公司. 版权所有  
京ICP备16024965号-8
北京市公安局海淀分局网监中心备案编号:11010802021510
niuxiaotong@pcpop.com
17352615567
未成年人举报专区
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员