작년말에 API LOG 분석툴을 개발하여 사용중이 었다.
PRODUCT에서 API를 매일 가져온 후 DB에 넣어서 사용량 추이를 볼 수 있게 한 것 인데,
매일 새벽에 경유서버에서 전체 PRODUCT의 LOG 파일을 가져온 후 분석 서버에서 경유서버의 파일을 가져와서 DB에 넣는 구조로 되어 있다.

헌데 경유서버에 보안 관련 설정을 해 놓아서 인지 대칭 보안키를 설정했는데도 SCP나 RSYNC를 사용할 때 암호를 계속 물어 보는 것이었다.
흠 이 문제를 어떻게 풀어 볼까 하고 찾아보았더니 sshpass 라는 utility가 있다.
password를 입력하기 어려운 shell script에서 password를 입력해 주는 훌륭한(?) Tool인 것이다.
일단은 shell을 실행해서 테스트 해 보니 잘 돌아서, cron에도 등록을 했는데..
cron에서는 계속 문제가 생기는 것이다.
환경 변수 이슈인듯 해서 shell도 바꾸어 보고, 혹시나 파일 다운로드 되기 전에 다음 step이 실행되나 싶어서 sleep도 주고 했는데, 현상은 바뀌지 않는 것이다.

결국 수동으로 계속 실행하고 있었는데..
율이 때문에 출산 휴가 간 사이에 정팀장님이 그 부분을 확인하시고 환경 변수 이슈인것 같다고 하신다. 그러면서 -x를 option으로 주면 debugging 정보를 확인할 수 있을 꺼라는 Hint까지..

일단 script내에 -x를 주고 테스트를 진행해 보니 일단 debug 정보가 나오기에,
cron 실행되는 걸 기다려서 cron log를 봤는데... log에는 정보가 없다.
근데.. shell에서 계속 mail이 왔다는 메시지가 떠서 mail 함을 열어 봤더니.. 거기에 debug 메시지가 포함된 실행 정보가 보이는 것이다.

결국 그 정보를 통해서 원인을 알아내어 이제는 자동으로 메일 작업이 잘 돌게 되었다.
근데.. 원인은... ?
sshpass가 /usr/local/bin 에 설치되어 있는데 해당 경로가 PASS에 안 잡혀서 발생한 것이었다.
sshpass 같은 utility면 당연히 shell에서 사용될 텐데.. 어찌 그게 cron 에서 자동으로 잡히는 경로에 설치가 안 됐는지...

좀더 자세한 정보는 아래 페이지에서 찾을 수 있다.
http://www.cyberciti.biz/tips/debugging-shell-script.html



Posted by headiron
,