로그파일 정리 쉘스크립트와 관련된 에러
Ⅰ. 운영중인 서버의 로그파일을 정리하는 스크립트를 작성해 보았다.
관리로직은
1. 60일이상 지난 파일은 삭제하기
2. 1일 이전 파일은 gzip으로 압축해 놓기.
(tar파일로 압축은 파일 사이즈가 거의 줄지 않는다. gzip으로 해야 1/10로 팍! 줄어듬.)
#rmLogFiles.sh
###############################################################################
# set DURATION
export DURATION=60
# set APPLOG_DIR
export APPLOG_DIR=/logs/apps
# set WASLOG_DIR
export WASLOG_DIR=/logs/weblogic
# set BOAPMLOG_DIR
export BOAPMLOG_DIR=/logs/boapm
echo "\n\n"
date
echo "1. remove $DURATION days ago Log files "
find $APPLOG_DIR -type f -mtime +$DURATION -exec /usr/bin/rm -f {} \;
find $WASLOG_DIR -type f -mtime +$DURATION -exec /usr/bin/rm -f {} \;
find $BOAPMLOG_DIR -type f -mtime +$DURATION -exec /usr/bin/rm -f {} \;
echo "2. gzip 1 day ago Log files "
find $APPLOG_DIR -type f ! -name "*.gz" -mtime +1 -exec /usr/contrib/bin/gzip {} \;
find $WASLOG_DIR -type f ! -name "*.gz" ! -name "*.log" -mtime +1 -exec /usr/contrib/bin/gzip {} \;
find $BOAPMLOG_DIR -type f ! -name "*.gz" -mtime +1 -exec /usr/contrib/bin/gzip {} \;
echo "------------------------------------"
###############################################################################
Ⅱ. 이 스크립트를 crontab으로 등록해 놓고 사용하기로 함.
#crontab
0 1 * * * /logs/rmLogFiles.sh >> /logs/rmLogFiles.out
Ⅲ. 이때 발생된 문제
해당 스크립트 파일을 돌렸을 때는 정상적으로 rm, gzip이 동작했는데
crontab으로 돌리면 gzip이 제대로 동작하지 않는 현상 발견됨.
cron은 경로(path)를 정확하게 명시하지 않으면 잘 못찾는 경우가 종종 발생한다고 함.
따라서 원래 스크립트는
find $APPLOG_DIR -type f ! -name "*.gz" -mtime +1 -exec gzip {} \;
이런 것이었는데,
find $APPLOG_DIR -type f ! -name "*.gz" -mtime +1 -exec /usr/contrib/bin/gzip {} \;
이렇게 바꾸고 문제 해결됨.
[출처] 로그파일 정리 쉘스크립트와 관련된 에러|작성자 베타