我試圖通過ssh
命令監視gerrit
事件。該命令如下。作爲守護進程運行ssh連接
ssh -p 29418 review.example.com gerrit stream-events
我需要監視在不同ports
運行的各種這樣gerrit
實例和對從這些gerrit
實例接收到的事件執行進一步的分析。我想通過使用python
的代碼來完成。我考慮將這些各種ssh
連接作爲多個進程運行,爲此我使用multiprocessing
python
程序包試圖使用daemon
屬性來運行該進程,作爲daemon
。以下是我的代碼片段。
import multiprocessing as mp
class MyProcess(mp.Process):
def __init__(self, target, args):
mp.Process.__init__(self, target=target, args=args)
while True:
running = get_runnig_instances() #get all the running gerrit instances
for instance in running:
port_num = instance.port
url = instance.ip
proc = MyProcess(target=client_setup, args=(url,port_num,)) #client_setup(url,port_num) is a function that runs the command for the ssh connection to stream gerrit events
proc.daemon = True
proc.start()
proc.join()
這並沒有爲運行SSH命令第一gerrit
實例的控制不從功能client_setup
回到上面這段代碼和攤位那裏建立連接,等待捕捉任何可能的工作後,事件。因此,任何其他正在運行的事件都不會被捕獲。
而且,get_running_instances
函數每次都返回一組不同的運行實例。因此,我無法一次創建所有流程。
我也試過用daemon
包來達到同樣的效果。以下是代碼片段。
import multiprocessing as mp
import daemon
class MyProcess(mp.Process):
def __init__(self, target, args):
mp.Process.__init__(self, target=target, args=args)
while True:
running = get_runnig_instances() #get all the running gerrit instances
for instance in running:
port_num = instance.port
url = instance.ip
with daemon.DaemonContext():
proc = MyProcess(target=client_setup, args=(url,port_num,)) #client_setup(url,port_num) is a function that runs the command for the ssh connection to stream gerrit events
proc.start()
proc.join()
我在這裏面臨同樣的問題。我如何去做這件事?我不確定我做錯了什麼,需要幫助。
對於廣泛的解釋抱歉。
我會查看'asyncio'。它似乎適合我的用例。謝謝。 – nidHi
另外,對於這種用例,'parallel-ssh'會有什麼用處? – nidHi
我沒有使用parallel-ssh,但它似乎相當活躍,並針對其替代方案提出了有效的論點。聽起來可能是最不可能進入的選項,前提是你可以安裝和使用你使用的任何python安裝的gevent。有一個線程聲明Parallel ssh還不支持python 3,因爲gevent還沒有廣泛的支持,儘管我沒有看到他們很快就不能支持它。 – parity3