supervisor-3:xml_rpc
别人博客转载,做个记录
原文链接:http://lixcto.blog.51cto.com/4834175/1540795
supervisor提供的两种管理方式,supervisorctl和web其实都是通过xml_rpc来实现的。
xml_rpc其实就是本地可以去调用远端的函数方法,然后函数方法经过一番处理后,把结果返回给我们。
xml_rpc不懂的同学建议去百度百度它的原理机制。这个比较简单,楼主也是上午刚搞懂。
在python里面实现xml_rpc就更加的简单,用SimpleXMLRPCServer和xmlrpclib这两个模块就可以分别实现服务端和客户端了。
调用supervisor的xml_rpc接口,其实很简单。先做好下面这两步
import xmlrpclib
p = xmlrpclib.Server('http://localhost:9001/RPC2')
注意xmlrpclib.Server()里面的url和咱们supervisor.conf里的配置是相关的
做完上面的步骤,我们就可以得到一个叫做p的对象。p这个对象,有很多存放在服务端的方法。
supervisor默认的xml_rpc方法定义在下面这个路径里面
/usr/local/lib/python2.7/dist-packages/supervisor-3.1.0-py2.7.egg/supervisor/rpcinterface.py
我们可以使用system.listMethods()的方法,来查看服务端都有哪些方法可供调用?
>>>server.system.listMethods()
['supervisor.addProcessGroup', 'supervisor.clearAllProcessLogs', 'supervisor.clearLog', 'supervisor.clearProcessLog', 'supervisor.clearProcessLogs', 'supervisor.getAPIVersion', 'supervisor.getAllConfigInfo', 'supervisor.getAllProcessInfo', 'supervisor.getIdentification', 'supervisor.getPID', 'supervisor.getProcessInfo', 'supervisor.getState', 'supervisor.getSupervisorVersion', 'supervisor.getVersion', 'supervisor.readLog', 'supervisor.readMainLog', 'supervisor.readProcessLog', 'supervisor.readProcessStderrLog', 'supervisor.readProcessStdoutLog', 'supervisor.reloadConfig', 'supervisor.removeProcessGroup', 'supervisor.restart', 'supervisor.sendProcessStdin', 'supervisor.sendRemoteCommEvent', 'supervisor.shutdown', 'supervisor.startAllProcesses', 'supervisor.startProcess', 'supervisor.startProcessGroup', 'supervisor.stopAllProcesses', 'supervisor.stopProcess', 'supervisor.stopProcessGroup', 'supervisor.tailProcessLog', 'supervisor.tailProcessStderrLog', 'supervisor.tailProcessStdoutLog', 'system.listMethods', 'system.methodHelp', 'system.methodSignature', 'system.multicall']
看到了吧,有这么多的方法,我们如果想知道某一个方法怎么用,可以用system.methodHelp(name)去查看,例如:
server.system.methodHelp('supervisor.startProcess')
这么查看其实还是有点麻烦的,直接去官网看吧,官网上列举了常用方法的用法。其实supervisor本身提供的xml_rpc的方法有很多很多,包括查看进程状态,启动/停止/重启进程,查看日志,发送event等等。
有了这些方法,我们就可以向远处执行相应的操作。或者获取想要的数据,OK,后续数据怎么处理,怎么用,就可以根据大伙的实际需求去发挥了。
还有上面的每个方法都是supervisor.x的形式,前面的supervisor其实是,我们定义在
[rpcinterface:supervisor],rpc接口的名称。
既然有,rpc接口需要名称,那么显然名称是为了区分rpc接口。在supervisor里面,如果我们觉得supervisor自带的rpc接口函数不够用,那么我们就可以定义自己的rpc接口函数。自己定义的函数可以直接写进rpcinterface.py里面去。不过为了不污染人家原有的东西,最好别这么干。
supervisord中rpc接口函数定义的方法,除了需要在supervisord.conf中加上一块配置外,还需要一个函数签名。
先看看supervisord.conf中怎么定义吧。配置文件中找个地方,放入下面这么段东西。里面具体的接口名称,路径,及签名函数的名称,大伙可以自己去指定了。我的形式是这个样子的
[rpcinterface:myrpc]
supervisor.rpcinterface_factory = myrpc.rpc:my_rpc
args = 1
注意,第二行的args = 1。表示传入my_rpc这个签名函数的参数。supervisor中,签名函数的第一个参数必须为"supervisord",后面可以没有别的参数,以key/value的形式传入。
其他参数如同args = 1的形式,放在[rpcinterface:myrpc]的块里面
OK,我们就用上面的配置,来举个小例子,来看看自定义rpc接口的完整实现。
先看看,myrpc.rpc,rpc.py这个自定义模块里面是什么?
#!/usr/bin/env python class Rpc(object):
def __init__(self,supervisord,args):
self.supervisord = supervisord
self.args = args def walk_args(self):
return self.walk def my_rpc(supervisord,**args):
return Rpc(supervisord,args)
启动supervisord之后,进行下面的操作

我们的刚才定义的那个函数出来了,而且执行成功了。
OK,举了个小例子把流程走通了,没啥实际用处,深入搞的话就看大伙的具体需求了。
本文出自 “小城运维” 博客,请务必保留此出处http://lixcto.blog.51cto.com/4834175/1540795
supervisor-3:xml_rpc的更多相关文章
- Python学习笔记【Supervisor】:使用Supervisor监控Tornado进程
Linux常见应用服务配置模式nginx和supervisor:采用主配置文件+项目配置文件 安装(如果使用pip安装注意看是否需要指定使用python2版本) 第一步:在Linux中使用apt-ge ...
- 安装supervisor 失败 :/usr/bin/python: bad interpreter: No such file
以前在安装python 双版本时将python改为了python2所以找不到python,打开那个echo_supervised_conf然后把 #!/usr/bin/python 改为如图就可以了
- supervisor(三)xml_rpc
supervisor提供的两种管理方式,supervisorctl和web其实都是通过xml_rpc来实现的. xml_rpc其实就是本地可以去调用远端的函数方法,然后函数方法经过一番处理后,把结果返 ...
- Erlang OTP学习:supervisor [转]
转自: http://diaocow.iteye.com/blog/1762895 今天细致的看了下supervisor,现在做个总结: 其中,方块代表supervisor process,它的功能很 ...
- ASP.NET Core教程:使用Supervisor做ASP.NET Core应用程序守护进程
一.前言 在上一篇文章中,我们讲解了如何在Linux服务器上面部署ASP.NET Core应用程序,并且使用Nginx作为反向代理.我们在Linux服务器上面,是通过ASP.NET Core自宿主的方 ...
- 进程管理supervisor的简单说明
背景: 项目中遇到有些脚本需要通过后台进程运行,保证不被异常中断,之前都是通过nohup.&.screen来实现,带着能否做一个start/stop/restart/reload的服务启动的想 ...
- (转)supervisor
转载:https://www.cnblogs.com/zhoujinyi/p/6073705.html 进程管理supervisor的简单说明 背景: 项目中遇到有些脚本需要通过后台进程运行,保证不被 ...
- laravel进程管理supervisor的简单说明
原文地址:https://www.cnblogs.com/zhoujinyi/p/6073705.html 背景: 项目中遇到有些脚本需要通过后台进程运行,保证不被异常中断,之前都是通过nohup.& ...
- Linux Supervisor 守护进程基本配置
supervisor:C/S架构的进程控制系统,可使用户在类UNIX系统中监控.管理进程.常用于管理与某个用户或项目相关的进程. 组成部分supervisord:服务守护进程supervisorctl ...
随机推荐
- nGrinder安装指南
NGrinder 由两个模块组成,其运行环境为 Oracle JDK 1.6 nGrinder controller web 应用程序,部署在Tomcat 6.x 或更高的版本 nGrinder A ...
- Ubuntu GNURadio gr-Radar 的安装
1.安装Ubuntu 进行磁盘管理,设置不少于50G的未分配空间 使用rufus-2.8制作Ubuntu 16.4安装盘 保持U盘插入,重启电脑,开机时进入BIOS设置从该安装盘启动并安装 2.激活w ...
- HTML插入FLASH
<object id="player" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" code ...
- Alpha阶段项目总结
1.我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们的软件是一款面向高校学生的简单快速的云笔记,不仅具有笔记的添加.修改.查看和删除功能,还有笔记公开功能,用户 ...
- jQuery中10个非常有用的遍历函数
使用jQuery,可以 很容易的选择HTML元素.但有些时候,在HTML结构较为复杂时,提炼我们选择的元素就是一件麻烦的事情.在这篇教程中,我们将探讨十种方 法去精炼和扩展我们将要操作的集合. HTM ...
- python 解压 压缩包
转 http://m.blog.csdn.net/blog/wice110956/26597179# 这里讨论使用Python解压如下五种压缩文件: .gz .tar .tgz .zip .rar ...
- SQL处理数组,字符串转换为数组
原文转载自:http://hi.baidu.com/gagahjt/item/fd081316450f05028ebde413 一.按指定符号分割字符串,返回分割后的元素个数,方法很简单,就是看字符串 ...
- github with msysgit:配置SSH Key
Step 1: Check for SSH keys First, we need to check for existing ssh keys on your computer. Open up G ...
- 坑爹的微信支付v3,其实没有那么坑
http://www.cnblogs.com/zskbll/p/wxpay.html 研究微信开发一年多了,每个新接口,都会第一时间进行研究.微信支付开放很久,一直没机会接触到支付接口,等了好久终于从 ...
- windows7 gvim 配置(好用)
http://blog.csdn.net/anders_zhuo/article/details/8949003