Shell 에서 FTP uploading check
API로는 처리가 안되는 Client issue로
별도 Job을 작성해서 FTP로 정보를 제공해 주는 서비스가 있는데..
얼마전에 해당 Client의 FTP 서버 이슈로 파일이 전송되지 않는 문제가 발생했다.
그쪽에서 문제 해결 한 다음에 FTP 서버에 수동으로 파일을 넘겨 주어 해당 이슈는 해결이 되었는데..
그 쪽 VP가 FTP Uploading 중 문제가 발생할 경우에 1시간 주기로 여러번 Try 할 수 있도록 Script를 수정해 달라는 요청을 해왔다.
마침 몇 일간 다른 이슈가 있어서 조만간 봐주겠다고 메일만 보내놓고 있었는데..
어제 VP가 수정 요청 어떻게 됐냐고 물어 온다.
흑.... 어물쩡 넘어 갈 까 했었는데...
오늘 마침 시간이 나서.. 자료를 찾아 보다가
Matt한테 이슈를 얘기 해 보니 간단한 solution을 준다.
Shell에서 command를 실행 한 후 exit code를 체크해 보면 될꺼라고 한다.
internet에서 예제까지 찾아서..
http://linuxers.org/howto/how-find-exit-code-last-executed-command-bash-using-environment-variable
$? 값을 체크하면 이전에 실행된 command의 return 값을 확인할 수 있다고 ..
흠.... 이런 좋은 TIP을 하고 생각하며 script를 작성하려니...
다른 article에 ftp는 에러가 발생해도 정상(0) 를 return한다는 내용을 찾아서 바로 알려 준다.
http://stackoverflow.com/questions/4899316/getting-exit-status-code-from-ftp-command-in-linux-shell
결국 아래와 같이 FTP 메시지를 Capture 하여 SUCCESS MESSAGE가 있는 지 수동으로 체크해야 한단다.
FTPLOG=/temp/ftplogfile
ftp -inv <<! > $FTPLOG
open server
user ftp pwd
put filename
close
quit
!
FTP_SUCCESS_MSG="226 Transfer complete"
if fgrep "$FTP_SUCCESS_MSG" $FTPLOG ;then
echo "ftp OK"
else
echo "ftp Error: "$OUT
fi
exit 0
결국은 위 내용을 응용하여 에러 발생하면 SLEEP 했다가 다시 FTP 파일 올리는 방법으로 해당 SHELL 수정을 완료 했다.
혼자 끙끙 거리면서 해결할라고 했으면 한 참 뒤져도 해결 못했을 텐데
Matt의 TIP 덕분에 1~2시간 만에 해결하였다.
모르는 문제는 너무 혼자서 해결하려 하기 보다는 함께 공유하면 쉽게 해결 될 수 있다는>>..
그리고 Matt이 정말 좋은 동료라는 걸 새삼스럽게 각인하는 하루 였다.
Thanks , Matt.