1

我正在测试一个 corosync 集群。我试图使具有浮动IP的接口失败,以确保资源使用python迁移到另一个节点。

现在的困境是我的命令确实在远程机器上执行,但是我的测试代码永远挂起,等待它永远不会得到的回复——由于注入失败,节点将重新启动。

ssh = SSHClient(self.get_ms_ip(ms),
                        self.get_ms_user(ms),
                        self.get_ms_password(ms))
ssh.connect()
self.logger.info("Failing FIP eth now on %s" % ms)
ssh.exec_command(cmd, timeout=1)
#Code never reached this comment.

在 python 中,我怎样才能发送命令并继续而不等待任何返回?我试过用 subprocess.Popen 包装我的 ssh.exec_command,如这里建议的运行进程和不要等待,但这并没有产生任何不同。

4

3 回答 3

2

你不想要一个子进程,你想要一个线程。生成一个运行exec_command调用的线程,您将能够继续使用您的代码。

于 2014-11-29T06:18:27.227 回答
0

你试过了nohup吗?

ssh.exec_command('nohup %s &'%cmd, timeout=1)
于 2014-11-29T06:21:41.703 回答
0

Python 不能很好地处理线程。无法手动退出线程。我最终不得不创建一个工作方法来创建 shh 连接并运行将作为单独的 multiprocessing.Process 运行的 exec_command。

通过这种方式,我能够在下一次测试运行之前正确地在测试后进行清理(作为 python 单元测试框架的一部分)。

于 2014-12-03T00:44:39.240 回答