2

1 回の XMLRPC 呼び出しで、Supervisord によって管理されているリモート サーバーで実行されている約 20 のサービスを停止しようとしています。

ただし、特定のプロセスを除外したいのですが、次のようなことができれば素晴らしいと思います。

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

別の方法として、利用可能なすべてのプロセスのリストを持っているので、実際にすべてのサービスを停止したり、20 の個別の呼び出しを行ったりするよりも、以下のようなことを行う方が優れています。

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

これは、次のことを行うよりもはるかに優れています。

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

どんな助けでも大歓迎です!

ありがとう

4

2 に答える 2

1

の XML-RPC サーバーはエンドポイントsupervisordをサポートしています。それを使用して、 XML-RPC プロキシを使用して呼び出しのグループを送信します。system.multicall()stopProcessMultiCall

multicall = xmlrpclib.MultiCall(serverproxy)
for proc in procs:
    if proc in exclude:
        continue
    multicall.supervisor.stopProcess(proc)
res = multicall()

serverproxyサーバーへの XML-RPC プロキシはどこにありますかsupervisord。呼び出しは 1 つの HTTP 要求として送信され、サーバー上で順番に処理されますstopAllProcesses()stopProcess後者は、とにかく見つかった各プロセスを内部的に呼び出します。

于 2012-12-20T21:09:04.433 に答える
0

すべてのプロセス名のリストがあります。

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

および除外するプロセス名のリスト:

exclude = ['monitorapp', 'nagios']

一度に 1 つずつ呼び出すことができます...

これにより、除外リストにない各プロセスに対して「stopProcess()」が呼び出されます。

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

API をリファクタリングして (可能であれば)、include/exclude を使用して 1 回の呼び出しでプロセスのリストを処理することをお勧めします。

于 2012-12-20T18:16:23.293 に答える