1. 程式人生 > >[python基礎]xml_rpc遠程調控supervisor節點進程

[python基礎]xml_rpc遠程調控supervisor節點進程

already style check dsi 啟動 imp viso api success

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節點進程