supervisord管理进程详解

时间:2021-04-01 14:53:52
 supervisord管理进程详解 2015-01-14 23:26:16

分类:Python / Ruby

主管是由python语言编写,基于linux操作系统的一款服务器管理工​​具,
用于监控服务器的运行,发现问题能立即自动预警及自动重启等功能
。Supervisor类似于monit,monit 
和supervisor的一个比较大的差异是supervisor管理的进程必须由supervisor来启动,
monit可以管理已经在运行的程序; 
supervisor还要求管理的程序是非daemon程序,supervisord会帮你把它转成守护进程程序,
因此如果用supervisor来管理nginx的话,必须在nginx的配置文件里添加一行设置daemon off让nginx以非守护进程方式启动。

一,监事的组成

主管
服务器主管名为supervisord。 
它负责在自己的调用中启动子程序,  
响应客户端的命令,重新启动崩溃或退出的子进程,  
记录其子进程stdout和stderr输出,以及生成和处理
对应于子进程生命周期中的点的“事件”  

服务器进程使用配置文件。这通常位于/etc/supervisord.conf中。
 此配置文件是“Windows-INI”样式的配置文件。 
通过正确的文件系统权限来保护此文件非常重要,  
因为它可能包含未加密的用户名和密码。

2。
supervisorctl主管的命令行客户端名为supervisorctl。 
它为上级提供的功能提供了一个类似shell的界面。从supervisorctl,  
用户可以连接到不同的supervisord进程,获取控制的子进程的状态,  
停止和启动子进程,并获取上级运行进程的列表。

命令行客户端通过UNIX域套接字或Internet(TCP)套接字与服务器通信。
服务器可以断言客户端的用户在允许他执行命令之前应该出现认证证书。 
客户端进程通常使用与服务器相同的配置文件,但其中具有[supervisorctl] 
部分的任何配置文件  都可以正常工作。

3. 如果您启动对互联网套接字的管理员,Web服务器
A(稀疏)Web用户界面具有与supervisorctl相当的功能,可通过浏览器访问
 在激活配置文件的[inet_http_server]部分后,
访问服务器URL(例如http:// localhost:9001 /)以通过
Web界面查看和控制进程状态

4. XML-RPC接口
服务于Web UI的相同HTTP服务器提供了一个XML-RPC接口,可用于询问
和控制主管及其运行的程序。请参阅XML-RPC API文档。
平台要求 Web服务器如果您启动针对Internet套接字的超级用户,则可通过浏览器访问具有与supervisorctl相媲美的功能(稀疏)Web用户界面在激活配置文件的[inet_http_server]部分后,访问服务器URL(例如http:// localhost:9001 /)以通过Web界面查看和控制进程状态4. XML-RPC接口服务于Web UI的相同HTTP服务器提供了一个XML-RPC接口,可用于询问和控制主管及其运行的程序。请参阅XML-RPC API文档。平台要求 Web服务器如果您启动针对Internet套接字的超级用户,则可通过浏览器访问具有与supervisorctl相媲美的功能(稀疏)Web用户界面  。 在激活配置文件的[inet_http_server]部分后,访问服务器URL(例如http:// localhost:9001 /)以通过Web界面查看和控制进程状态  4. XML-RPC接口服务于Web UI的相同HTTP服务器提供了一个XML-RPC接口,可用于询问和控制主管及其运行的程序。请参阅XML-RPC API文档。平台要求 9001 /) 在激活配置文件的[inet_http_server]部分后通过Web界面查看和控制进程状态4. XML-RPC接口服务于Web UI的相同HTTP服务器提供了一个XML-RPC接口,可用于询问和控制主管及其运行的程序。请参阅XML-RPC API文档。平台要求 9001 /) 在激活配置文件的[inet_http_server]部分后通过Web界面查看和控制进程状态4. XML-RPC接口服务于Web UI的相同HTTP服务器提供了一个XML-RPC接口,可用于询问  和控制主管及其运行的程序。请参阅XML-RPC API文档。平台要求

二,主管安装

首先必须安装好python环境,linux自带python,但建议安装2.7.0以上的版本。
主管可以通过
$ sudo easy_install主管
安装。安装成功后显示完成,可以再次进入python环境,
输入“import supervisor”,如没有提示错误,则表示安装成功。

当然也可以通过主管官网下载后setup.py安装安装。

出现错误提示:
安装/usr/local/python2.7.3/lib/python2.7/site-packages/supervisor-4.0 .0_dev-py2.7.egg主管
处理依赖关系== 4.0.0-dev 
搜索meld3> = 1.0.0 
阅读https://pypi.python.org/simple/meld3/ 
https:// pypi上的下载错误.python.org / simple / meld3 /:[Errno 1] _ssl.c:504:error:14090086:SSL例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败 - 可能找不到某些软件包!
找不到“meld3”的索引页 
(可能拼写错误?) 扫描所有软件包的索引(可能需要一段时间)
阅读https://pypi.python.org/simple/ https://pypi.python.org/simple/上的
下载错误:[Errno 1] _ssl.c:504:错误:14090086:SSL例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败 - 可能找不到某些软件包!
没有找到meld3> = 1.0.0的本地软件包或下载链接
错误:找不到Requirement.parse('meld3> = 1.0.0')的合适发行版

解决办法:
上网查询了问题原因:是curl的证书太老了需要下载最新的证书:
下载最新的证书文件,   
$ wget http://curl.haxx.se/ca/cacert.pem   
更名为ca-bundle.crt放置到默认目录   
$ mv cacert.pem ca-bundle。 crt  
$ mv ca-bundle。  





三,监事配置

接下来是对supervisor配置,首先要生成配置文件,在shell 
终端输入:$ echo_supervisord_conf> /etc/supervisord.conf 
可以通过文本编辑器修改这个文件,
$ vim /etc/supervisord.conf 

下面是一个示例的配置文件:
; /etc/supervisord.conf 
[unix_http_server] 
file = /var/run/supervisor.sock 
chmod = 0777 
chown = root:root 

[inet_http_server]#Web 
管理界面设定
port = 9001 
; username = admin 
; password = yourpassword 

[supervisorctl] 
必须和'unix_http_server'里面的设定匹配
serverurl = unix:///var/run/supervisord.sock 

[supervisord] 
logfile = / var / log / supervisord / supervisord.log; (主日志文件;默认$ CWD / supervisord.log)
logfile_maxbytes = 50MB; (最大主日志文件字节b4旋转; 
默认为50MB) logfile_backups = 10; (主日志文件轮数备份数;默认
值为10)loglevel = info; (log level; default info; others:debug,warn,trace)
pidfile = / var / run / supervisord.pid; (supervisord pidfile; default supervisord.pid)
nodaemon = true; (在前台启动,如果为true;默认为false)
minfds = 1024; (最小可用启动文件描述符;默认1024)
minprocs = 200; (最小使用过程描述符;默认
值为200)user = root; (默认为当前用户,如果root用户需要)
childlogdir = / var / log / supervisord /; ('AUTO'子日志目录,默认$ TEMP)

[rpcinterface:supervisor] 
supervisor.rpcinterface_factory = supervisor.rpcinterface:

make_main_rpcinterface ;管理的单个进程的配置,可以添加多个程序
[program:chatdemon] 
command = python /home/felinx/demos/chat/chatdemo.py 
autostart = true startsecs 
= 5 
user = felinx 
redirect_stderr = true 
对这个程序的log的配置,上面的logfile_maxbytes是supervisord本身的日志配置
stdout_logfile_maxbytes = 20MB 
stdoiut_logfile_backups = 20 
stdout_logfile = /var/log/supervisord/chatdemo.log 

[program:app] 
command = python app.py --port = 61000 
目录= / opt / test / supervisor; 先进入到这个目录,再执行命令,对于程序环境要在当前目录的程序很有用
autostart = true; 从supervisord start开始(默认值:true)
autorestart = unexpected; 是否/何时重新启动(默认值:
意外) startsecs = 1; 秒数必须保持运行(def。1)
user = root 

配置一组进程,对于类似的程序可以通过这种方式添加,避免手工一个个添加
[程序:groupworker] 
command = python /home/felinx/demos/groupworker/worker.py 
numprocs = 24 
process_name =%(program_name) s _%(process_num)02d 
autostart = true 
startsecs = 5 
user = felinx 
redirect_stderr = true 
stdout_logfile = /var/log/supervisord/groupworker.log 
;(更多配置说明请参考:http://supervisord.org/configuration.html )

编辑完成后保存退出。
使用命令启动主管:
$ supervisord 
$ supervisorctl 
用ps命令查看运行情况,应用现在已经自动运行了。1) user = root 配置一组进程,对于类似的程序可以通过这种方式添加,避免手工一个个添加[程序:groupworker] command = python /home/felinx/demos/groupworker/worker.py numprocs = 24 process_name =%(program_name) s _%(process_num)02d autostart = true startsecs = 5 user = felinx redirect_stderr = true stdout_logfile = /var/log/supervisord/groupworker.log ;(更多配置说明请参考:http://supervisord.org/configuration.html )编辑完成后保存退出。使用命令启动主管:$ supervisord $ supervisorctl 用ps命令查看运行情况,应用现在已经自动运行了。1) user = root 配置一组进程,对于类似的程序可以通过这种方式添加,避免手工一个个添加[程序:groupworker] command = python /home/felinx/demos/groupworker/worker.py numprocs = 24 process_name =%(program_name) s _%(process_num)02d autostart = true startsecs = 5 user = felinx redirect_stderr = true stdout_logfile = /var/log/supervisord/groupworker.log ;(更多配置说明请参考:http://supervisord.org/configuration.html )编辑完成后保存退出。使用命令启动主管:$ supervisord $ supervisorctl  用ps命令查看运行情况,应用现在已经自动运行了。

四,Supervisord管理

Supervisord安装完成后有两个可用的命令行supervisord和supervisorctl,
命令使用解释如下:
supervisord,初始启动Supervisord,启动,管理配置中设置的进程。
supervisorctl停止programxxx,停止某一个进程(programxxx),programxxx为[程序:chatdemon]里配置的值,这个示例就是chatdemon。 
supervisorctl启动programxxx,启动某个进程
supervisorctl restart programxxx,重启某个进程
supervisorctl stop groupworker:,启启所有属于名为groupworker这个分组的进程(start,restart同理)
supervisorctl停止所有,停止全部进程,注:启动,重新启动,停止都不会载入最新的配置文件。
supervisorctl重装,载入最新的配置文件,停止原有进程并按新的配置启动,管理所有进程。
supervisorctl update,根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启。

注意:显示用停止停止掉的进程,用于重新加载或更新都不会自动重启。

五,页面管理

管理员自带有Web服务器,可以通过页面来管理进程,
前提是开启配置文件中的[inet_http_server]项。
如果服务器是单网卡,可以修改如下:
[inet_http_server]; inet(TCP)服务器默认
端口= 127.0.0.1:51000; (ip_address:port说明符,*:所有iface的端口)
; username = user; (默认是没有用户名(打开服务器))
; password = 123; (默认是没有密码(打开服务器))

如果是多网卡,则需要指定一张网卡:
[inet_http_server]; inet(TCP)服务器默认禁用
端口= 192.168.2.13:51000; (ip_address:port说明符,*:所有iface的端口)
; username = user; (默认是没有用户名(打开服务器))
; password = 123; (默认是没有密码(打开服务器))

在浏览器地址栏中输入:
http:// 192。