레이블이 file size 0인 게시물을 표시합니다. 모든 게시물 표시
레이블이 file size 0인 게시물을 표시합니다. 모든 게시물 표시

2015년 2월 8일 일요일

crontab 사용시 주의사항

오늘 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를 다 써주자.