[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)
結果如下:
[‘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.signalAllProcesses‘, ‘supervisor.signalProcess‘, ‘supervisor.signalProcessGroup‘,
‘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‘]
所有方法在/Library/Python/2.7/site-packages/supervisor/rpcinterface.py下
舉個例子:
1.啟動該節點下某個程序:
if server.supervisor.startProcess(process_name): print(‘%s has started‘ %process_name)
如果該程序已經啟動會報錯:
xmlrpclib.Fault: <Fault 60: ‘ALREADY_STARTED: celery_beat‘>
2.停止某個程序
server.supervisor.stopProcess(process_name)
如果該程序未啟動則會報錯:
xmlrpclib.Fault: <Fault 70: ‘NOT_RUNNING: celery_beat‘>
3.讀取日誌
og = server.supervisor.readLog(0,500)
print(log)
結果如下:
2018-09-14 17:31:25,782 INFO RPC interface ‘supervisor‘ initialized
2018-09-14 17:31:25,782 CRIT Server ‘inet_http_server‘ running without any HTTP authentication checking
2018-09-14 17:31:25,785 INFO daemonizing the supervisord process
2018-09-14 17:31:25,786 INFO supervisord started with pid 51752
2018-09-14 17:31:58,968 INFO spawned: ‘django_web‘ with pid 51757
2018-09-14 17:32:00,512 INFO success: django_web entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2018-0
4.關閉某個supervisor節點
server.supervisor.shutdown()
此時如果再用xmlrpclib創建server會報錯:
socket.error: [Errno 61] Connection refused
完。
[python基礎]xml_rpc遠程調控supervisor節點進程