supervisor(三)xml_rpc

supervisor提供的两种管理方式,supervisorctl和web其实都是通过xml_rpc来实现的。

xml_rpc其实就是本地可以去调用远端的函数方法,然后函数方法经过一番处理后,把结果返回给我们。

xml_rpc不懂的同学建议去百度百度它的原理机制。这个比较简单,楼主也是上午刚搞懂。

在python里面实现xml_rpc就更加的简单,用SimpleXMLRPCServer和xmlrpclib这两个模块就可以分别实现服务端和客户端了。

调用supervisor的xml_rpc接口,其实很简单。先做好下面这两步


1

2

import xmlrpclib

= xmlrpclib.Server(‘http://localhost:9001/RPC2‘)

注意xmlrpclib.Server()里面的url和咱们supervisor.conf里的配置是相关的

做完上面的步骤,我们就可以得到一个叫做p的对象。p这个对象,有很多存放在服务端的方法。

supervisor默认的xml_rpc方法定义在下面这个路径里面


1

/usr/local/lib/python2.7/dist-packages/supervisor-3.1.0-py2.7.egg/supervisor/rpcinterface.py

我们可以使用system.listMethods()的方法,来查看服务端都有哪些方法可供调用?


1

2

>>>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)去查看,例如:


1

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中怎么定义吧。配置文件中找个地方,放入下面这么段东西。里面具体的接口名称,路径,及签名函数的名称,大伙可以自己去指定了。我的形式是这个样子的


1

2

3

[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这个自定义模块里面是什么?


1

2

3

4

5

6

7

8

9

10

11

12

#!/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,举了个小例子把流程走通了,没啥实际用处,深入搞的话就看大伙的具体需求了。

时间: 2024-10-01 07:38:03

supervisor(三)xml_rpc的相关文章

supervisor(一)基础篇

这两天干的活,是让楼主写一个supervisor的listener,用来监控supervisor所管理子进程的状态,当子进程异常退出时,楼主写的这个listener将会触发报警.在这里总结下supervisor的知识吧 先说说supervisor是干什么的吧? supervisor这东西,其实就是用来管理进程的.咱们为什么要用supervisor呢?因为,相对于我们linux传统的进程管理方式来说,它有很多的优势,要不然咱们也不会闲着没事去用supervisor了. OK,下面来看看superv

supervisor进程管理工具

先说说supervisor是干什么的吧? supervisor这东西,其实就是用来管理进程的.咱们为什么要用supervisor呢?因为,相对于我们linux传统的进程管理方式来说, 它有很多的优势,要不然咱们也不会闲着没事去用supervisor了. OK,下面来看看supervisor有哪些好处吧. 简单 为啥简单呢?因为咱们通常管理linux进程的时候,一般来说都需要自己编写一个能够实现进程start/stop/restart/reload功能的脚本, 然后丢到/etc/init.d/下面

进程监控工具supervisor 启动Mongodb

一什么是supervisor Superviosr是一个UNIX-like系统上的进程监控工具. Supervisor是一个Python开发的client/server系统,可以管理和监控*nix上面的进程.不过同daemontools一样,它也不能监控daemon进程 官网:http://supervisord.org/ 二为啥用supervisor 部署简单 : 为啥简单呢?因为咱们通常管理linux进程的时候,一般来说都需要自己编写一个能够实现进程start/stop/restart/re

supervisor更改某项目配置后 需要重新启动才有效

一.原理 supervisor是所有项目的父进程: supervisor(pid=29208)会成为主进程,管理各个项目的进程. 当项目A(pid=11531)挂掉,supervisor根据设置autorestart.startretries是否重启. 若要重启,则会重启项目A(pid=13357), 若不重启,则项目A(pid=0). 当supervisor被kill,管理的项目全部死掉,重启supervisor(pid=14140),管理的项目都重启: supervisor是如何知道某项目挂

supervisor-3:xml_rpc

别人博客转载,做个记录 原文链接:http://lixcto.blog.51cto.com/4834175/1540795 supervisor提供的两种管理方式,supervisorctl和web其实都是通过xml_rpc来实现的. xml_rpc其实就是本地可以去调用远端的函数方法,然后函数方法经过一番处理后,把结果返回给我们. xml_rpc不懂的同学建议去百度百度它的原理机制.这个比较简单,楼主也是上午刚搞懂. 在python里面实现xml_rpc就更加的简单,用SimpleXMLRPC

1:nodejs开发环境的配置

nodejs开发环境的配置: 刚开始学习主要是在mac上,所以暂时只记录在自己mac上学习经验: 一:安装 1:从官网下载node的运行环境 https://nodejs.org/ 2:双击pkg文件安装,一般node自己会在环境变量中添加自己: 安装完了可以看到 二:测试, 1:打开终端输入node -v, 可以看到如下的版本信息,表示安装OK了 2:安装一个调试工具:supervisor sudo npm install -g supervisor 三:一个小demo 1:新建nodeDem

[python基础]xml_rpc远程调控supervisor节点进程

supervisor提供的两种管理方式,supervisorctl和web其实都是通过xml_rpc来实现的. xml_rpc其实就是本地可以去调用远端的函数方法,在python中只需要引入xmlrpclib即可实现对客户端的操作 例如: import xmlrpclib server = xmlrpclib.server('http://localhost:9001/RPC2') methods = server.system.listMethods()print(methods) 结果如下:

Nodejs学习(三)-安装nodejs supervisor,提高点效率吧。

安装好了express准备写项目,可是发现随便改一下js都要使用npm start重新启动才能生效,这个很不好,搜索一下发现有这么一个模块supervisor.那就安装一下吧. 1.安装,这个必须是全局安装那就开始吧. npm -g install supervisor 2.到达项目目录执行一下吧. supervisor app.js 执行,奇怪怎么启动不了,查了一下资料发现,新版的入口文件是bin/www,你们可以看一下package.json. { "name": "te

supervisor安装及其配置

一.supervisor概述 supervisor是一个c/s系统,被用来在类Unix系统中监控进程状态.supervisor使用python开发. 服务端进程为supervisord,主要负责启动自身及其监控的子进程,响应客户端命令,重启异常退出的子进程,记录子进程stdout和stderr输出,生成和处理子进程生命周期中的事件.其配置文件一般为/etc/supervisord.conf,可以在配置文件中配置相关参数,包括supervisord自身的状态,其管理的各个子进程的相关属性等.sup