2014-11-12 3 views
1

각 기계에서 서비스가 실행중인 기계 목록이 있습니다. 어떤 서비스가 특정 문자열을 기록했는지 파악하려고합니다. 그래서 내가 로그를 서버와 그렙에 로그인 할 수있는 쉘 스크립트 작성 : sh script.sh < /tmp/machine-list /tmp를/기계리스트쉘 스크립트가 종료되는 이유는 무엇입니까?

while read line 
do 
    echo ==== 
    echo $line 
    ssh [email protected]$line "grep 'my test string' /abc/*/logs/stderr" 
    echo $line 
    echo ========== 
done 

내가 이것을 실행 해요을 한 줄에 하나의 호스트 이름이 있습니다.

그러나 단일 시스템에 로그인 한 후 두 번째 문자를 반향 출력하면 스크립트가 종료됩니다 (===). 이 일을

+1

그것은 CentOS6입니다. 그리고 만약 내가 ssh 라인을 주석 처리한다면, 모든 라인을 파싱한다. – user1159517

+0

제발, 여기 출력과 에러 메시지를 올리시겠습니까? – Jdamian

답변

1

보십시오, 나는 쉘 확장 의심 :

while read line 
do 
    echo ==== 
    echo $line 
    ssh [email protected]$line <<'EOF' 
    grep 'my test string' /abc/*/logs/stderr 
EOF 
    echo $line 
    echo ========== 
done 
+0

나는 그렇게 생각하지 않는다. 위의'ssh' 명령을 여러 번 사용했는데 아무런 문제가 없었습니다. – Jdamian

+0

내 의견으로는 솔루션을 사용해 보는 것이 좋습니다. – Skynet

0

내가 정확히 모르겠어요,하지만 난 파일 기술자 때 SSH 세션이 종료 닫혀 while 열 생각합니다. 다음 작품들입니다.

hosts=$(cat /tmp/machine-list) 

for line in $hosts; do 
    echo ==== 
    echo $line 
    ssh [email protected]$line "grep 'my test string' /abc/*/logs/stderr" 
    echo $line 
    echo ========== 
done 

업데이트

내 생각 엔 가까웠다.
https://unix.stackexchange.com/questions/107800/using-while-loop-to-ssh-to-multiple-servers
bash script to ssh multiple servers in a Loop and issue commands

+1

'hosts = ($ (

+0

관련 질문을 확인하십시오. 배열을 사용하는 것이 더 나은 이유는 무엇입니까? – Sithsu

+3

단일 변수에 개행 문자를 삽입하고 단어 분리가'hosts'에서'lines'을 되 찾을 수 있도록 기본값으로 설정되기 때문에. 배열을 읽으면 값을 되 찾는 능력에 IFS가 영향을 미치지 않습니다. :) –

관련 문제