作为守护程序运行ssh连接

时间:2016-05-16 07:11:19

标签: ssh python

我正在尝试通过gerrit命令监视ssh个事件。命令如下。

ssh -p 29418 review.example.com gerrit stream-events

我需要监视在不同端口上运行的各种此类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返回到上面的代码并且在那里停止运行,这不起作用连接并等待捕获任何可能的事件。因此,不会捕获任何其他正在运行的gerrit实例的事件。

此外,get_running_instances函数每次返回一组不同的运行gerrit实例。因此,我无法一次创建所有流程。

我还尝试使用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()

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

0 个答案:

没有答案