2014-11-29 11 views
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. 

파이썬에서 어떻게 명령을 보내고 반환을 기다리지 않고 계속할 수 있습니까? 나는 여기에 제안 된대로 subprocess.Popen으로 내 ssh.exec_command를 래핑 해 보았습니다. Run Process and Don't Wait하지만 다른 것은 없었습니다.

답변

0

파이썬은 스레드를 멋지게 처리하지 않습니다. 스레드를 수동으로 종료 할 수 없습니다. shh 연결을 생성하고 별도의 다중 처리로 실행되는 exec_command를 실행하는 작업자 메소드를 작성해야했습니다. 프로세스.

이 방법을 사용하면 다음 테스트가 실행되기 전에 (파이썬의 단위 테스트 프레임 워크의 일부로) 제대로 테스트 한 후에 정리할 수있었습니다.

2

하위 프로세스가 필요하지 않으므로 스레드가 필요합니다. exec_command 호출을 실행하는 스레드를 생성하면 코드를 계속 실행할 수 있습니다.

0

nohup을 사용해 보셨습니까?

ssh.exec_command('nohup %s &'%cmd, timeout=1) 
+0

시도한 nohup과 코드가 계속되지만 이제 내 cmd가 실패합니다. 다음은 내 cmd입니다. cmd = "echo % s | sudo -S ifdown eth3"% self.get_ms_root_password (ms) – user597608

+0

이 래퍼를 사용해보십시오. sudo 명령을 쉽게 실행할 수 있습니다. http://stackoverflow.com/a/22592827/2854735 – HayatoY