[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

'업무' 카테고리의 다른 글

[Linux] 파일 내에 특정 문자열 찾기  (0) 2019.04.05

+ Recent posts