我试图在一个 XMLRPC 调用中停止在由 Supervisord 管理的远程服务器上运行的大约 20 个服务。
但是,我想从中排除某些进程,如果我能按照以下方式做一些事情那就太好了:
stopAllProcesses(exclude=["monitorapp","nagios"])
或者,我确实有一个所有可用进程的列表,因此即使执行类似下面的操作也比实际停止所有服务或执行 20 个单独调用要好:
stopProcess(["process1","process2","process3"])
这比做更好:
stopProcess("process1")
stopProcess("process2")
stopProcess("process3")
如有任何帮助,我们将不胜感激!
谢谢
请您参考如下方法:
supervisord 中的 XML-RPC 服务器支持 system.multicall() endpoint .使用它来发送 group 的 stopProcess 调用,使用 MultiCall XML-RPC proxy :
multicall = xmlrpclib.MultiCall(serverproxy)
for proc in procs:
if proc in exclude:
continue
multicall.supervisor.stopProcess(proc)
res = multicall()
serverproxy 是 supervisord 服务器的 XML-RPC 代理。这些调用将作为一个 HTTP 请求发送,并在服务器上连续处理,不会比 stopAllProcesses() 快或慢;后者在内部为找到的每个进程调用 stopProcess。
