[완료]Shell Script를 콘솔에서 실행하면 문제없이 돌아가는데, CronTab에 등록하면 안되네요.
글쓴이: cococo / 작성시간: 화, 2010/07/20 - 3:28오후
안녕하신지요. 날씨 많이 덥네요. -_-;;
다름이 아니오라, 스크립트를 만들었는데 정상적으로 돌아가지 않는 현상을 발견하여, 질문을 올립니다.
음....일단 스크립트 문장을 보시는 게 이해가 빠르겠네요.
#!/bin/sh USERID=******** PWD=******** DBNAME=******** TABLENAME1=********Table TABLENAME2=********Table FTPHOST="********" FTPID=******** FTPPWD=******** FTPRESULTFILE=ftpresult.txt SCRIPTLOG=scriptLog.log echo "------------------------------------------------------------" >> $SCRIPTLOG echo "$(date +"%F %R:%S") LogBackUp START" >> $SCRIPTLOG if [ $# -eq 1 ] then DATE=$1 echo "Input Parameter is [$DATE]" echo "Input Parameter is [$DATE]" >> $SCRIPTLOG elif [ $# -eq 0 ] then echo "usage: $0 YYYYMMDD" echo " YYYYMMDD : date for BackupTable." DATE=$(date +%Y%m%d -d '-30days') echo " NOWDAYS - 30 days = [$DATE]" echo " NOWDAYS - 30 days = [$DATE]" >> $SCRIPTLOG else echo "usage: $0 YYYYMMDD " echo "Only get 0 or 1 argument " echo "usage: $0 YYYYMMDD " >> $SCRIPTLOG echo "Only get 0 or 1 argument " >> $SCRIPTLOG echo "DATE:[$DATE] FILENAME1[$FILENAME1] FILENAME2[$FILENAME2]" >> $SCRIPTLOG exit 0 fi TABLENAME2=$TABLENAME1$DATE FILENAME1=$TABLENAME2.mysqldump FILENAME2=$TABLENAME2.mysqldump.tar.gz echo "DATE:[$DATE] USERID[$USERID] PWD[$PWD] DBNAME[$DBNAME] TABLENAME1[$TABLENAME1] TABLENAME2[$TABLENAME2] FILENAME1[$FILENAME1] FILENAME2[$FILENAME2]" >> $SCRIPTLOG mysqldump -u$USERID -p$PWD $DBNAME $TABLENAME2 > $FILENAME1 if [ $? -ne 0 ] then echo " mysqldump -u$USERID -p$PWD $DBNAME $TABLENAME2 > $FILENAME1 FAIL." >> $SCRIPTLOG echo "$(date +"%F %R:%S") LogBackUp END" >> $SCRIPTLOG echo "------------------------------------------------------------" >> $SCRIPTLOG exit -1 else echo " mysqldump -u$USERID -p$PWD $DBNAME $TABLENAME2 > $FILENAME1 SUCCESS." >> $SCRIPTLOG fi tar -zcvf $FILENAME2 $FILENAME1 if [ $? -ne 0 ] then echo " tar -zcvf $FILENAME2 $FILENAME1 FAIL." >> $SCRIPTLOG echo "$(date +"%F %R:%S") LogBackUp END" >> $SCRIPTLOG echo "------------------------------------------------------------" >> $SCRIPTLOG exit -1 else echo " tar -zcvf $FILENAME2 $FILENAME1 SUCCESS." >> $SCRIPTLOG fi ftp -n $FTPHOST <<END_SCRIPT > $FTPRESULTFILE user "$FTPID" "$FTPPWD" binary put $FILENAME2 ls $FILENAME2 bye END_SCRIPT FTPFileSize=$(grep $FILENAME2 ./$FTPRESULTFILE | gawk '{ print $3 }' ) LOCALFileSize=$(ls -l $FILENAME2 | gawk '{ print $5 }' ) if [ "$FTPFileSize" = "$LOCALFileSize" ] ; then echo " File $FILENAME2 Size $FTPFileSize is same." >> $SCRIPTLOG else echo " File $FILENAME2 Size $FTPFileSize and $LOCALFileSize is NOT EQUAL." >> $SCRIPTLOG fi echo "$(date +"%F %R:%S") LogBackUp END" >> $SCRIPTLOG echo "------------------------------------------------------------" >> $SCRIPTLOG exit 0
스크립트는 길지만, 내용은 간단합니다.
mysqldump를 이용해 백업파일.mysqldump 를 만들고, 이를 tar로 압축한 다음, FTP 로 이동시키는 거죠.
(로그용 Echo등이 들어있어 약간 복잡할수도... ㅡ,.ㅡ;;)
근데 제가 이해가 안 되는 게, 이걸 콘솔로 실행하면 문제없이 돌아가는데, cron에 등록시켜 놓으면 스크립트로 생성하는 mysql 백업파일의 크기가 0이 되기 때문에 결국 의도했던 대로 안 됩니다.
즉, 스크립트는 돌아가는데, 생성된 백업 파일의 크기가 0이라서 결론적으로는 의도한 바대로 안 되는 거죠.
저처럼 [스크립트를 console에서 실행하면 되는데, cron으로 등록해서 실행하면 다른 결과가 나타나는] 현상을 겪으신 분들은 조언 주시면 대단히 감사하겠습니다. 혹은 검색어나, 아이디어라도...
그럼, 날 더운데 몸 조심하시고, 든든히 드시길 바랍니다.
Forums:
행복은 희생없이는
행복은 희생없이는 얻을 수 없는 것인가?
시대는 불행없이는 넘을 수 없는 것인가?
의심해 볼 것: 1.
의심해 볼 것:
1. working directory
2. permission
3. 그밖의 environment variable (PATH따위)
가 되겠습니다.
로그엔 어떻게나오나요? 기대한대로 기록 되나요?
언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net
언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net
결론적으로 mysqldump의
결론적으로 mysqldump의 실행결과가 제대로 안 나온다는 것이군요.
mysqldump이 실행이 안된다는 것이니 대체로 환경변수 특히 PATH 변수의 문제일 가능성이 큽니다.
mysqldump, tar, ftp를 모두 절대경로 즉 /usr/bin/tar, /usr/local/bin/mysqldump 식으로 수정하신다음에 cron으로 돌려보십시요.
그래서 실행이 된다면 100% PATH 환경변수의 문제입니다.
보통은 경로문제와
보통은 경로문제와 표준출력 문제로 안됩니다.
------식은이 처------
길이 끝나는 저기엔 아무 것도 없어요. 희망이고 나발이고 아무 것도 없어.
답변 감사드립니다.
mithrandir님, 세이군님, nthroot님!! 감사합니다.
덕분에 문제점을 찾았습니다!!!
말씀하신대로 mysqldump 를 절대경로로 써 주니 되는군요. 답변 주신 분들 모두 감사드립니다.
그런데 이상한게, /etc/crontab 에 path=/usr/local/mysql/bin 을 추가했는데 왜 이때는 파일 size가 0 인 채 였다가 mysqldump를 /usr/local/mysql/bin/mysqldump 로 하니까 되네요.
뭐가 다른지... @_@;;;
답변 주신 분들 모두 감사드립니다. 좋은 하루 되세요! ^_^)/~
-----------------------------------------------
행복은 희생없이는 얻을 수 없는 것인가?
시대는 불행없이는 넘을 수 없는 것인가?
댓글 달기