supervisor(三)xml_rpc
supervisor提供的两种管理方式,supervisorctl和web其实都是通过xml_rpc来实现的。
xml_rpc其实就是本地可以去调用远端的函数方法,然后函数方法经过一番处理后,把结果返回给我们。
xml_rpc不懂的同学建议去百度百度它的原理机制。这个比较简单,楼主也是上午刚搞懂。
在python里面实现xml_rpc就更加的简单,用SimpleXMLRPCServer和xmlrpclib这两个模块就可以分别实现服务端和客户端了。
调用supervisor的xml_rpc接口,其实很简单。先做好下面这两步
|
1
2
|
import xmlrpclibp = 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_rpcargs = 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 pythonclass Rpc(object): def __init__(self,supervisord,args): self.supervisord = supervisord self.args = args def walk_args(self): return self.walkdef my_rpc(supervisord,**args): return Rpc(supervisord,args) |
启动supervisord之后,进行下面的操作
看到了吧,我们的刚才定义的那个函数出来了,而且执行成功了。
OK,举了个小例子把流程走通了,没啥实际用处,深入搞的话就看大伙的具体需求了。
supervisor(三)xml_rpc的更多相关文章
- 进程管理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.& ...
- 进程监控工具supervisor 启动Mongodb
进程监控工具supervisor 启动Mongodb 一什么是supervisor Superviosr是一个UNIX-like系统上的进程监控工具. Supervisor是一个Python开发的cl ...
- supervisor简介
一什么是supervisor Superviosr是一个UNIX-like系统上的进程监控工具. Supervisor是一个Python开发的client/server系统,可以管理和监控*nix上面 ...
- supervisor(一)基础篇
这两天干的活,是让楼主写一个supervisor的listener,用来监控supervisor所管理子进程的状态,当子进程异常退出时,楼主写的这个listener将会触发报警.在这里总结下super ...
- supervisor配置详解(转)
有阵子没写博客了,这段时间一直在研究python django框架和前端相关的东西.楼主学通信的,对web这一块啥也不懂,学了一个礼拜django,接着学了2个礼拜前端,感觉还是做不出来一个好看的页面 ...
- Supervisor (进程管理利器) 使用说明 - 运维笔记
一.Supervisor简单介绍supervisor是一个 Client/Server模式的系统,允许用户在类unix操作系统上监视和控制多个进程,或者可以说是多个程序.supervisor与laun ...
- nginx, supervisor, celery
资料: supervisor和nginx使用 1 .supervisor 管理进程工具 2 .nginx 反向代理, 负载均衡 安装nginx $ sudo apt-get update $ su ...
随机推荐
- hibernate xx(tableName) is not mapped
数据库中表名是:book,数据库表名不区分大小写的 之后我在hibernate 使用book, String sql="from book"; Query query=sessio ...
- [转载]Linux命令笔记
*以下内容均来自于网络转载,感谢原作者分享 <对Linux新手非常有用的20个命令> 传送门 英文原文为“Switching From Windows to Nix or a Newbie ...
- WAMP2.5 Forbidden
Forbidden You don't have permission to access /DuoLamPHP/index.php on this server. Apache/2.4.9 (Win ...
- openssl/asn1.h file not found的解决方法
iOS 引入支付宝 缺少 #include <openssl/asn1.h> 报错 解决方法: 在 Building Settings -> Search Paths -& ...
- [SQL Server]如何快速查找使用了某个字段的所有存储过程
[SQL Server]如何快速查找使用了某个字段的所有存储过程 当一个系统中使用了很多的表,并且存在大量的存储过程,当数据库中的某个表删除了某个字段,那么相应的存储过程也需要改动,但是我 ...
- [Android Pro] Android 官方推荐 : DialogFragment 创建对话框
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37815413 1. 概述 DialogFragment在android 3.0时 ...
- 用Mysqlbinlog备份BinLog文件
默认情况下, mysqlbinlog读取二进制文件[BinLog]并以文本的方式呈现[text format].mysqlbinlog可以直接地从本地读取Log,也可以读取远程的Log[--read- ...
- iOS - HTTPS接口加密和身份认证
为什么要使用HTTPS代替HTTP HTTPS和HTTP的区别 https协议需要到CA申请证书,一般免费证书很少,需要交费. http是超文本传输协议,信息是明文传输,https则是具有安全性的SS ...
- jQueryEasyUi验证
多重验证: { field : 'startPort', title : "起始端口", editor: "text", width : 50, edi ...
- Git撤销提交和修改相关操作
团队开发中经常遇到错误删除文件,错误提交等情况,那么使用Git该如何正确的进行撤销和恢复呢? 一.增补提交 git commit –C HEAD –a --amend -C表示复用指定提交的提交留言, ...