파일 기반의 do while 작성시 유의사항
Log 파일들을 분석할 일이 있어서 여러 서버에서 Log 파일을 가져오는 Shell을 작성하고 있었다.
다른 Shell Script를 참조로 아래와 같이 작성하였고
while read host
do
....
done < host.txt
while loop이 잘 도는 지 체크해 보려고 echo로 확인해 보면 잘 실행되었다.
그래서 원하는 script를 추가 하였을 경우에는 loop이 실행되지 못하고 한 번 실행 한 후 바로 멈추는 것이었다.
너무 이상한데 마침 SSH 인증 관련 문제가 있어서 그 문제떄문이려니 해보니 그것도 아니다..
그래서 인터넷을 찾아 보니 아래 페이지가 TIP을 주었다.
http://stackoverflow.com/questions/5626374/while-read-line-do-and-grep-problems
마침 내가 작업하려는게 host 파일들에 접속해서 파일을 받아 오는 것이었는데..
파일 받아 올때 파일 에 있는 CRLF 가 while loop을 exist 하는 것이었다.
결국 shell 내에서 array를 선언한 후 아래와 같이 수정하여 실행을 하니 정상적으로 수행되었다.
HOST_LIST=( HOST1 HOST2 .. )
for host in "${HOST_LIST[@]}"
...
done
Shell이 빨라서 좋은 데 이렇게 전혀 생각도 못했던 부분에서 문제가 생기면 시간을 너무 잡아 먹어서 .. 좀..
뭐 어쨋든.. rsync 할 떄 CPU가 올라 가는 부분을 제외하면 거의 대 부분의 이슈는 해결 된 듯..
rsync 이슈도 googling 해보니 -c 옵션을 사용할 경우 파일 Checksum을 실행 하여 파일 COPY를 한 다고 하니,
이 부분을 제거하면 문제가 없을 듯 하다.
어차피 내가 지금 짜고 있는 건 파일 전체를 다운 받아야 하는 Code 이니깐.