supervisord停止/启动所有进程但排除X和Y进程

时间:2012-12-20 16:50:37

标签: python distributed supervisord xmlrpclib

我正试图在一次XMLRPC调用中停止在由Supervisord管理的远程服务器上运行的大约20个服务。

但是,我想从中排除某些进程,如果我可以按照以下方式执行某些操作会很棒:

stopAllProcesses(exclude=["monitorapp","nagios"])

或者,我确实列出了所有可用的进程,所以即使执行以下操作也比实际停止所有服务或进行20次单独调用更好:

stopProcess(["process1","process2","process3"])

这比做得好:

stopProcess("process1")
stopProcess("process2")
stopProcess("process3")

非常感谢任何帮助!

由于

2 个答案:

答案 0 :(得分:1)

supervisord中的XML-RPC服务器支持system.multicall() endpoint。使用MultiCall XML-RPC proxy发送stopProcessmulticall = xmlrpclib.MultiCall(serverproxy) for proc in procs: if proc in exclude: continue multicall.supervisor.stopProcess(proc) res = multicall() 来电

serverproxy

其中supervisordstopAllProcesses()服务器的XML-RPC代理。这些调用将作为一个HTTP请求发送,并在服务器上串行处理,不会比stopProcess更快或更慢;无论如何,后者内部调用{{1}}来查找每个进程。

答案 1 :(得分:0)

您有一个所有进程名称的列表:

procs = ['monitorapp', 'nagios', 'process1', 'process2', 'process3']

以及要排除的进程名称列表:

exclude = ['monitorapp', 'nagios']

你可以一次打电话给他们......

这将为不在排除列表中的每个进程调用'stopProcess()':

stop_procs = [p for p in procs if p not in exclude]
for proc in stop_procs:
    stopProcess(proc)

更好的方法是重构API(如果可能的话)来处理一个带有include / exclude的调用中的进程列表。