作为守护进程运行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连接。这就满足了我的用例。