Skip to main content
 首页 » 编程设计

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

2025年05月04日8qq号

我试图在一个 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。