我正在测试corosync集群。我试图让具有浮动IP的接口失败,以确保资源通过python迁移到另一个节点。
现在的困境是我的命令确实在远程计算机上执行,但是我的测试代码永远挂起,等待它永远无法获得的回复 - 由于注入失败,thenode将重新启动。
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,如Run Process and Don't Wait所示,但这并没有产生任何不同。
答案 0 :(得分:2)
你不想要一个子进程,你想要一个线程。生成一个运行exec_command
调用的线程,您将能够继续使用您的代码。
答案 1 :(得分:0)
你试过nohup
吗?
ssh.exec_command('nohup %s &'%cmd, timeout=1)
答案 2 :(得分:0)
Python不能很好地处理线程;无法手动退出线程。我最终必须创建一个可以创建shh连接并运行exec_command的worker方法,该方法将作为单独的multiprocessing.Process运行。
通过这种方式,我可以在下一次测试运行之前正确地进行测试(作为python的单元测试框架的一部分)。