2012-07-13 2 views
0

SSH를 통해 몇 대의 컴퓨터에 하드웨어 테스트를 복사/실행/기록하기 위해 자동화 된 SSH 스크립트를 사용하고 있습니다. 테스트 파일은 매 30 분마다 실행되고 데이터를 수집 한 다음 죽을 때까지 파일에 기록해야합니다. 더 좋은 예가 부족한 경우 :(True) 루프가 SSH 스크립트를 깨는 동안

참고 :이 두 파일 중 어느 것도 실제 코드가 아닙니다. 나는 그것을 복사하기 위해 내 앞에서 그것을 가지고 있지 않습니다.

file.py :

#!/usr/bin/env python 
import os 

idleUsage = [] 
sleepTime = 1800 

while(True): 
    holder = os.popen('mpstat | awk \'{printf("%s\n", $9)}\'') 
    idleUsage.append(100.0 - float(holder[1])) 

    f = open("output.log", 'w') 
    f.write(%idleUsage) 
    f.close() 

    sleep(sleepTime) 

automatic-ssh.sh :이 명령을 실행에 걸리면 반드시

#!/bin/bash 

autossh uname1 password1 ip1 command <----gets stuck after ssh runs 
autossh uname2 password2 ip2 command 
autossh uname3 password2 ip3 command 

. 나는 '명령어 &'을 시도하고 코드의 전체 라인 끝에 앰퍼샌드를 넣었다. 누군가 거기에 조언을하나요? 현재 컨텍스트의

+0

나는'os.system ("sar | grep kb")'을 할 필요가 있다고 생각한다. ... 확실하지는 않지만 나는 파이썬의 유효 라인을 생각하지 않는다 ... –

+7

파이썬처럼 보이지 않는다. 통사론. –

+0

구문이 올바르지 않다고 생각합니다.하지만 예제 일 뿐이며 코드에는 포함되지 않습니다. 내 관심사는 내 자동 ssh 스크립트를 멈추지 않고 while 루프를 실행하는 것입니다. –

답변

1

확실하지하지만 난 subprocess를 사용하는 것이 좋습니다 :

from subprocess import Popen 

p1 = Popen(["sar"], stdout=PIPE) 
p2 = Popen(["grep", "kb"], stdin=p1.stdout, stdout=PIPE) 
p1.stdout.close() # Allow p1 to receive a SIGPIPE if p2 exits. 
output = p2.communicate()[0] 
+0

조금만 시도해 보겠습니다. 지금 당장은 모든 SSHD를 죽이는 스크립트의 일시적인 해결책을 찾은 다음 SSHD를 시작한 후에 진정한 루프로 들어갑니다. –

0

그래서, 당신의 쉘 스크립트는 ssh를 통해 원격 컴퓨터에 연결하고 끝없는 파이썬 명령을 실행하고, 해당 SSH 연결을 원하는 배경으로 들어가?

#!/bin/sh 
ssh thingie 1 > out.1 & 
ssh thingie 2 > out.2 & 
ssh thingie 3 > out.3 & 
wait 

즉 개별 파일에 로깅 백그라운드에서 세 SSH 명령을 킥오프 것, 다음 스크립트는 인수로 PID를 부여하지 않을 경우 모두 종료 (wait 때까지, 모든 아이들을 기다리는 대기 출구). 스크립트를 죽이면 자식 ssh 프로세스도 종료되어야합니다. 그게 네가 묻고있는 것과 아닌지 확실하지 않지만 어쩌면 도움이 될지 모르겠다. :)

관련 문제