[Linux] 로그관리
[요구사항]
"A는 일주일이 지나면 압축 한 달이 지나면 삭제"
"B는 보름이 지나면 압축 한 달이 지나면 삭제"
미션: 정기적으로 생산되는 로그를 관리해라
[필요한 사전지식]
1. 'find' 명령어 및 파라미터
2. .sh 파일 만드는 방법
#!/bin/bash
## BACK_A : 7 days ago
## BACK_B : 15 days ago
## DELTE : 30 days ago
BACK_A=7
BACK_B=15
DELETE=30
## PATH
## xx/common
## xx/s00/common
## xx/s01/common
## xx/s02/common
## Process Start
for i in 0 1 2 3
do
## 2년전 날짜 지정으로 최대 2년 전 내용을 기준으로 함
ORIGIN_DATE=$(date -d '2 year ago + %Y%m%d)
## 현재 날짜 지정
NOW_DATE=$(date + %Y%m%d)
## BACK_A 7일 로그 지정
BACK_A_DATE=$(date -d '7 day ago' + %Y%m%d)
## BACK_B 15일 로그 지정
BACK_B_DATE=$(date -d '15 day ago' +%Y%m%d)
## DELETE 30일 로그
DELETE=$(date -d '1 month ago' +%Y%m%d)
## 폴더 변경 로직
if [ $i -eq 3 ]; then
COMMON="common"
else
COMMON=sc0$i"/common"
fi
## 로그 경로
LOGDIR_A={경로}/A/$COMMON
LOGDIR_B={경로}/B/$COMMON
## 정보 출력
echo "===== INFO ====="
echo "target : $LOGDIR"
echo "ORIGIN_DATE : $ORIGIN_DATE"
echo "NOW_DATE : $NOW_DATE"
echo "BACK_A_DATE($BACK_A day) : $BACK_A_DATE"
echo "BACK_B_DATE($BACK_B day) : $BACK_B_DATE"
echo "DELETE_DATE($DELETE day) : $DELETE_DATE"
echo "===== INFO ====="
## 로그 파일 찾아 삭제 시작
## 2년 ~ 한 달 전
## 압축방식이 달라질 경우 LOGPATH의 내용을 추가해야함
while [[ $ORIGIN_DATE -le $DELETE_DATE ]]
do
YEAR=`date -d $ORIGIN_DATE "+%Y"`
MONTH=`date -d $ORIGIN_DATE "+%m"`
LOGPATH=$LOGDIR"/"$YEAR"/"$MONTH"/"$ORIGIN_DATE".log"
LOGPATH2=$LOGDIR"/"$YEAR"/"$MONTH"/"$ORIGIN_DATE".log.tar"
LOGPATH3=$LOGDIR"/"$YEAR"/"$MONTH"/"$ORIGIN_DATE".log.gz"
## .log 파일 삭제
if [ -e "$LOGPATH" ] ; then
rm -f $LOGPATH
echo "$LOGPATH 삭제"
fi
## .bz2 파일 삭제
if [ -e "$LOGPATH2" ] ; then
rm -f $LOGPATH2
echo "$LOGPATH2 삭제"
fi
## .gz 파일 삭제
if [ -e "$LOGPATH3" ] ; then
rm -f $LOGPATH3
echo "$LOGPATH3 삭제"
fi
ORIGIN_DATE=`date -d "$ORIGIN_DATE + 1 day" "+%Y%m%d"`
done
## A의 빈 디렉토리 삭제
EMPTY_DIR_A=$LOGDIR_A"/"
echo "find $EMPTY_DIR_A -empty -type d -delete -print"
find $EMPTY_DIR_A -empty -type d -delete -print
## B의 빈 디렉토리 삭제
EMPTY_DIR_B=$LOGDIR_B"/"
echo "find $EMPTY_DIR_B -empty -type d -delete -print"
find $EMPTY_DIR_B -empty -type d -delete -print
## 로그파일 압축 : 30일 ~ 15일 전
while [[ $DELTE_DATE -le $BACK_B_DATE ]]
do
YEAR=`date -d $DELTE_DATE "+%Y"`
MONTH=`date -d $DELTE_DATE "+%m"`
LOGPATH_B=$LOGDIR_B"/"$YEAR"/"$MONTH"/"$DELTE_DATE".log"
EXTENSION=".tar"
## B 디렉토리의 파일 압축 및 LOG 파일 삭제
if [ -e "$LOGPATH_B" ]; then
tar -jcvf $LOGPATH_B$EXTENSION $LOGPATH_B
rm -f $LOGPATH_B
fi
DELTE_DATE=`date -d "$DELTE_DATE + 1 day" "+%Y%m%d"`
done
## 압축대상 : 30일 ~ 7일 전
while [[ $DELETE_DATE -le $BACK_A_DATE ]]
do
YEAR=`date -d $DELETE_DATE "+%Y"`
MONTH=`date -d $DELETE_DATE "+%m"`
LOGPATH_A=$LOGDIR_A"/"$YEAR"/"$MONTH"/"$DELETE_DATE".log"
EXTENSION=".tar"
## ㅁ 디렉토리의 파일 압축 및 LOG 파일 삭제
if [ -e "$LOGPATH_A" ]; then
tar -jcvf $LOGPATH_A$EXTENSION $LOGPATH_A
rm -f $LOGPATH_A
fi
DELETE_DATE=`date -d "$DELETE_DATE + 1 day" "+%Y%m%d"`
done
## 종료
done