supervisor:一个进程管理系统
- supervisor是一个客户端服务端皆可用的进程管理系统,用户可以用它来监控和管理类unix操作系统上的一系列进程
- supervisor和launchd,daemontools,runit这些进程管理工具类似,但supervisor并不是“process id 1”的初始化代替者,而是作为进程和项目/用户关系的控制系统
一、supervisor概述:
-
便利性:supervisor是将需要管理的服务进程作为它的子进程的方式启动的,在进程出现crash的情况下可以自动重启,而且直接通过配置就可以在supervisor服务启动时直接启动想要管理进程;不必要像
rc.d
脚本那样,逐个为进程编写各异的、复杂的初始化命令,而且避免了rc.d
脚本在进程crash后不自动重启服务的问题 -
精准性:Unix下面监控一个进程up/down的精准状态是比较难的,
.pid
文件标记进程状态也不是很可靠;但是supervisor将进程作为子进程启动的方式,就保证了它可以一直知道它子进程的当前状态,而且可以方便的查询到状态信息 -
“监管委托”:很多时候用户只是需要控制进程状态,一个进程运行过程中并不想也不需要充分的shell操作权限,可监听TCP端口的一些进程往往会需要root用户才能进行启动或重启;但是通常这种情况下,普通用户需要可以终止或者重启一个进程,但是提供给普通用户的权限往往是不够用的,同时很多时候我们不能任意提供普通用户root权限或者sudo权限;找各种情况下,supervisor作为root用户启动,那就可以允许普通用户通过supervisor去控制进程了;supervisor被赋予了有限的操作权限后,允许用户查看进程状态,直接通过
stop
,start
,restart
这些简单的命令就可以控制supervisor管理下的子进程 -
进程组管理:有时候进程需要成组或者是按照一定的优先顺序进行启动或者终止操作,这个时候很难解释给用户怎么样做控制,而supervisor允许用户给进程分配优先级,也允许用户通过supervisorctl客户端调用
start all
,restart all
这些命令去批量启动或者重启服务进程;这些进程可以被编辑分组,并配置好他们之间的逻辑关系作为一个进程组进行进程管理
二、supervisor的优势:
-
简单:supervisor通过固定的
.ini
格式配置管理的,这个.ini
文件有固定的格式,按照约定的格式编写配置,直接可以实现crash重启、日志回旋的功能,而且很容易上手 - 集中:supervisor提供了一系列进程的管理方法,既可以分别管理进程也可以组管理进程;可以通过配置让supervisor实现本地/远程命令行控制,甚至是web界面方式进行进程管理
- 高效:supervisor通过fork/exec 启动子进程,一些管理工具那样依赖PID文件或者定期检测的方式重启失败进程,但是supervisor不一样,因为在进程终止的时候,操作系统会立刻发消息给supervisor
- 扩展:supervisor有个简单的事件通知协议,无论是哪一种开发语言开发的工程都可以用supervisor来监控,而且还有个XML-RPC interface来管控;在python程序开发过程中supervisor可以直接作为扩展点使用
- 兼容:supervisor可以运行在除windows外的任意操作系统里:Linux, Mac OS X, Solaris, and FreeBSD都是支持的;加上supervisor是基于python语言实现的,所以也不强求C语言编译器
三、supervisor的组件:
supervisord:
- supervisord负责启动子项目作为supervisor的子进程,响应supervisor client的命令,重启crash掉或者已经存在的子进程,以标准输入输出记录子进程的log,在子进程生命周期内生成和把控点对点的事件通信
- 一般服务配置写在
/etc/supervisord.conf
中,文件中包含子进程管理的.ini
文件即可,需要关注的就是文件的权限管理问题,因为权限配置对于子进程的一些数据和文件的使用是有影响的
supervisorctl:
- supervisorctl相当于supervisor的命令行客户端,把supervisord提供的功能做了封装,让用户可以通过supervisorctl连接不同的supervisord进程,获取子进程状态,启动或终止子进程,还可以查看当前supervisord下运行的进程有哪些
- 这个命令行客户端负责和unix内部或TCP socket交流;在服务允许用户执行命令之前,一个服务可以断言当前客户端的用户是否应该提供用户身份凭据
- supervisorctl客户端通常是和supervisord服务使用一个配置文件,但是任何一个
[supervisorctl]
下的配置文件都可以运行
Web Server:
- 如果你启动supervisord的时候启用了internet端口,一个和supervisorctl功能类似的web用户界面就可以直接通过浏览器访问;在激活
[inet_http_server]
模块配置以后,用户可以通过类似http://localhost:9001/
这样的地址,直接查看和控制进程状态
XML-RPC接口
- 启动一个XML-RPC的web服务和http的web服务是一样的,都可以用来查询和控制supervisor和项目的运行状态
四、平台要求:
- linux和Mac OS均可以支持,但是windows不支持;
- python3.4或者python2.7版本可以更好的兼容supervisor,目前为止python2.6及以上版本都支持supervisor的使用
网友评论