supervisor 工具介绍

一 简介

supervisor 是一款基于Python的进程管理工具,可以很方便的管理服务器上部署的应用程序。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

管理单个应用程序

superisorctl [start|restart|stop|reload] GROUP_NAME:prog_name1 supervisorctl [start|restart|stop|reload] GROUP_NAME:prog_name2

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

四 参考文章

[1] Python 进程管理工具 supervisor 使用教程

[2] 官方文档

原文发表时间:2018-01-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏搜云库

搭建高吞吐量 Kafka 分布式发布订阅消息 集群

搭建高吞吐量 Kafka 分布式发布订阅消息 集群 简介 Kafka 是一种高吞吐的分布式发布订阅消息系统,能够替代传统的消息队列用于解耦合数据处理,缓存未处理...

27850
来自专栏xingoo, 一个梦想做发明家的程序员

Redis从单机到集群,一步步教你环境部署以及使用

Redis作为缓存系统来说还是很有价值的,在大数据方向里,也是需要有缓存系统的。一般可以考虑tachyon或者redis,由于redis安装以及使用更简单,所...

55460
来自专栏CSDN技术头条

自动化模式中的MySQL

原文:MySQL on Autopilot 作者:Tim Gross 翻译:孙薇 自动化模式(Autopilot Pattern)是一种设计应用与基础架构的方式...

26550
来自专栏nnngu

01 整合IDEA+Maven+SSM框架的高并发的商品秒杀项目之业务分析与DAO层

项目源代码:https://github.com/nnngu/nguSeckill ---- 这是一个整合IDEA+Maven+SSM框架的高并发的商品秒杀项...

39480
来自专栏JAVA高级架构开发

浅谈Nginx服务器的内部核心架构设计!

Nginx---Ngine X,是一款免费的、自由的、开源的、高性能HTTP服务器和反向代理服务器;也是一个IMAP、POP3、SMTP代理服务器;Nginx以...

34800
来自专栏IT技术精选文摘

从构建分布式秒杀系统聊聊分布式锁

最近懒成一坨屎,学不动系列一波接一波,大多还都是底层原理相关的。上周末抽时间重读了周志明大湿的 JVM 高效并发部分,每读一遍都有不同的感悟。路漫漫,借此,把前...

12230
来自专栏Puppeteer学习

超越Ctrl+S保存页面所有资源

页面所有资源包含本页面所在域资源以及第三方域资源,同主域的资源也认为第三方域资源,这种资源一般是以绝对路径的方式标识,同域下资源主要有三种表现方式 (以ht...

65730
来自专栏北京马哥教育

利用TCMalloc优化Nginx的性能

TCMalloc的全称为Thread-Caching Malloc,是谷歌开发的开源工具google-perftools中的一个成员。与标准的glibc库的Ma...

25850
来自专栏互扯程序

java 诊断工具—— Arthas

该说不说!小编做的这些功能,最讨厌的就是优化!某些前辈大佬写的代码小辈我实在不敢恭维!那逻辑!那sql!

23110
来自专栏散尽浮华

Centos下MooseFS(MFS)分布式存储共享环境部署记录

分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连,分布式文...

83050

扫码关注云+社区

领取腾讯云代金券