作为守护进程运行ssh连接

作为守护进程运行ssh连接,ssh,python,Ssh,Python,我试图通过ssh命令监视gerrit事件。命令如下 ssh -p 29418 review.example.com gerrit stream-events 我需要监视在不同端口上运行的各种gerrit实例,并对从这些gerrit实例接收到的事件执行进一步的分析。我想通过使用python编写代码来实现这一点。我考虑将这些不同的ssh连接作为多个进程运行,为此,我使用了multiprocessingpython包,并尝试使用daemon属性作为守护进程运行进程。下面是我的代码片段 import

我试图通过
ssh
命令监视
gerrit
事件。命令如下

ssh -p 29418 review.example.com gerrit stream-events
我需要监视在不同端口上运行的各种
gerrit
实例,并对从这些
gerrit
实例接收到的事件执行进一步的分析。我想通过使用
python
编写代码来实现这一点。我考虑将这些不同的
ssh
连接作为多个进程运行,为此,我使用了
multiprocessing
python包,并尝试使用
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()
这与对第一个
gerrit
实例运行
ssh
命令后的情况不同,控件不会从函数
client\u setup
返回到上述代码段,并在那里暂停建立连接并等待捕获任何可能的事件。因此,不会捕获任何其他正在运行的
gerrit
实例的事件

另外,
get\u running\u instances
函数每次都返回一组不同的运行
gerrit
实例。因此,我无法同时创建所有流程

我还尝试使用
守护进程
包实现同样的功能。下面是代码片段

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()

我在这里也面临同样的问题。我该怎么办?我不确定我做错了什么,需要帮助。

为什么不使用Paramiko?我正在使用Paramiko进行ssh连接。建立ssh连接时要执行的命令本身是阻塞的。我在join()中使用了一个超时,以确保使用get\u runnig\u instances()中的不同值再次执行while循环。这样会保留现有连接,如果有任何新值,也会建立新的ssh连接。这就满足了我的用例。