crontab 사용시 주의사항

Posted by MinSik on February 9, 2015
오늘 crontab으로 DB 백업 설정을 하다가
이 문제로 삽질을 해서 간단하게 정리해보았다.

내가 작성한 스크립트는 간단하게

mysqldump -uroot screencast > /Users/mickey/backup/$(date +%Y-%m-%d).sql

이렇게 되어있었다.
당연히 스크립트를 그냥 실행했을때는 잘 동작하였고

매일 새벽 1시에 돌게 하려고 crontab에 아래와 같이 등록하였다.

00 01 * * * /Users/mickey/projects/screencast/backup.sh

그런데 나중에 확인해보니 백업 파일 사이즈가 전부 0 이었다!!
당황스러워서 이것저것 구글링을 해보면서 삽질을 하다가
stackoverflow에서 힌트를 찾았다.

http://stackoverflow.com/questions/4995689/mysqldump-creates-empty-file-when-run-via-cron-on-linux

이걸 보면 스크립트 뒤에 2>&1 이걸 붙여서 로그를 확인해보라고 되어있었다.
역시 에러가 날땐 로그를 확인해봐야 하는데 나는 그냥 삽질만 하고 있었다...
그래서 위의 스크립트를 수정해서

mysqldump -uroot screencast > /Users/mickey/backup/$(date +%Y-%m-%d).sql 2>&1

이렇게 하고 돌렸더니 백업 파일에 에러 로그가 나왔다.
mysqldump 파일을 못찾는다는 에러였다.

그냥 bash 에서는 path에 설정이 되어 있어서
잘 동작하였지만 crontab으로 돌릴때는 path 설정이 안 먹히는것 같다.
그래서 아래와 같이 full path로 수정하니 잘 동작하였다.

/usr/local/bin/mysqldump -uroot screencast > /Users/mickey/backup/$(date +%Y-%m-%d).sql

오늘의 교훈은..

1. 에러가 날땐 로그를 잘 확인하자.
2. crontab으로 돌릴때 안전하게 full path를 다 써주자.