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

时间: 2024-12-15 22:46:10

supervisor-3:xml_rpc的相关文章

supervisor(三)xml_rpc

supervisor提供的两种管理方式,supervisorctl和web其实都是通过xml_rpc来实现的. xml_rpc其实就是本地可以去调用远端的函数方法,然后函数方法经过一番处理后,把结果返回给我们. xml_rpc不懂的同学建议去百度百度它的原理机制.这个比较简单,楼主也是上午刚搞懂. 在python里面实现xml_rpc就更加的简单,用SimpleXMLRPCServer和xmlrpclib这两个模块就可以分别实现服务端和客户端了. 调用supervisor的xml_rpc接口,其

Erlang OTP学习:supervisor [转]

转自: http://diaocow.iteye.com/blog/1762895 今天细致的看了下supervisor,现在做个总结: 其中,方块代表supervisor process,它的功能很简单,就负责看管它下面的“小弟”(child processes) 并且在必要的时候对某个child process执行restart或者terminate操作:而圆形就代表worker process,它才是真正负责干活的process:特别注意,supervisor process 监控的不一定

进程守护Supervisor【系列一:安装与配置】

进程守护Supervisor 准备工作:环境: Centos 7 (Centos6.5不适合以下教程) Python >= 2.7 (升级见:Python升级教程) pip包管理工具安装(已安装可跳过) curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py python get-pip.py 安装: 安装superviosr pip install supervisor 配置配置文件 // 创建配置目录 mkdir -p /etc/sup

使用supervisor进行进程管理

简介:  Supervisor是基于Python开发的进程管理程序,能将一个命令行进程转为后台daemon,可以替换nohup.&.screen等启动方案.还可以实现监控进程状态,当进程异常退出时能自动重启.它通过fork/exec的方式把这些被管理的进程当作supervisor的子进程来启动,这样只须在supervisor的配置文件中,填写目标进程的执行命令配置即可.也实现当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,可以选择是否自己启动和报警. supervisor还可以为sup

【云计算】使用supervisor管理Docker多进程-ntpd+uwsgi+nginx示例最佳实践

supervisor安装启动: apt-get install supervisor -y # start supervisord nodaemon /usr/bin/supervisord --nodaemon nginx示例: [program:nginx] command = /usr/sbin/nginx -g 'daemon off;' process_name = %(program_name)s stopsignal = QUIT autostart = true # starts

初识vue 2.0(3):Ajax请求

0,模拟ajax请求,需要构建web程序,使用express 方便快捷. 1,安装express 构建web server: npm install -g express npm install -g express-generator 2,创建 express 项目: express myserver cd myserver npm install 3,启动项目,一般情况下可以使用: npm start 但开发环境需要监控代码变动并自动重启进程,因此需要安装 supervisor. npm i

第三十六天:Tiny4412驱动开发之模式跳转

ARM支持七种模式,如下图所示: 1. User Mode:用户模式.    2.FIQ Mode:快速中断模式. 3. IRQ Mode:中断模式.中断(不包括软中断)处理函数在这种模式下执行.        4. Supervisor Mode:监视模式.软中断(SWI)处理函数在这种模式下执行.   5. Abort Mode:所有同内存保护相关的异常均在这种模式下执行.   6. Undefined Mode:处理无效指令的异常处理函数在这种模式下执行. 7. System Mode:特

storm启动supervisor源码分析-supervisor.clj

supervisor是storm集群重要组成部分,supervisor主要负责管理各个"工作节点".supervisor与zookeeper进行通信,通过zookeeper的"watch机制"可以感知到是否有新的任务需要认领或哪些任务被重新分配.我们可以通用执行bin/storm supervisor >/dev/null 2>&1 &来启动supervisor.bin/storm是一个python脚本,在这个脚本中定义了一个superv

进程管理supervisor的简单说明

背景: 项目中遇到有些脚本需要通过后台进程运行,保证不被异常中断,之前都是通过nohup.&.screen来实现,带着能否做一个start/stop/restart/reload的服务启动的想法找到里Supervisor.关于supervisor的介绍在网上大致搜索总结如下: Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启.它是通过fork/exec的方式把这些被管理的进程当作superviso