监督停止/启动所有进程,但不包括X和Y进程

2024-04-20 09:42:23 发布

您现在位置:Python中文网/ 问答频道 /正文

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

但是,我想排除某些流程,如果我能按照以下思路做些事情,那就太好了:

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

或者,我有一个所有可用流程的列表,因此,即使执行以下操作也比实际停止所有服务或执行20个单独呼叫要好:

^{pr2}$

比这样做好得多:

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

任何帮助将不胜感激!在

谢谢


Tags: 服务器列表远程流程事情excludenagiossupervisord
2条回答

supervisord中的XML-RPC服务器支持^{} endpoint。使用该命令发送stopProcess调用的,使用^{} 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。在

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

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

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

^{pr2}$

你可以给他们打电话,一次一个。。。在

此进程中的每个进程都不排除该进程:

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

最好是重构API(如果可能的话),以便在一次调用中使用include/exclude处理进程列表。在

相关问题 更多 >