시스템/Linux

로그 압축 및 로그 삭제 쉘스크립트

달빛궁전- 2024. 5. 31. 12:25

 

회사에서 업무를 하다가, Log 파일이 많이 생성이 되고 삭제할 필요성이 있어서 작성

 

로그가 생성된지 10일이 지나면, 압축 후 디렉토리는 삭제

그 이후 5일이 지나면 해당 압축파일 마저도 삭제하는 스크립트다.

 

요즘 어플리케이션이나, OS는 로그로테이션, 삭제 옵션이 있어서 사용은 잘 안하겠지만

그럼에도 필요할 때가 있으니 기록용으로 작성


"압축대상디렉토리"
"하위디렉토리명"
 항목만 원하는 것으로 변경하면 다른 환경에서도 사용 가능합니다.

#!/bin/bash

# 환경변수
compress_target_dir="압축대상디렉토리"
keep_compressed_days=10 
echo "압축대상 디렉토리의 시간(일)"
remove_old_days=$((keep_compressed_days + 5))
echo "압축 된 후 삭제할 시간(일)"

# 오늘 날짜 구하기
today=$(date +%Y%m%d)

# 작업 디렉토리로 이동
cd $compress_target_dir

# 압축 대상 로그 디렉토리 목록 확인
find . -type d -name "하위디렉토리명" -mtime +$keep_compressed_days | while read -r dir; do

 # 디렉토리 이름 추출
 log_date=$(basename "$dir")

 # 압축되지 않은 로그 파일 확인
 if [ -d "$dir" ]; then

 # 압축
 if tar -czvf "$dir.gz" "$dir"; then
 echo "$log_date 로그 압축됨"

# 압축 후 디렉토리 삭제
if [ -d "$dir" ]; then
rm -rf "$dir"
echo "$log_date 로그 압축 후 삭제됨"

fi
else
      echo "오류: $log_date 로그 압축 실패"
    fi
  fi

  # 오래된 압축 로그 삭제
  if [ $(find "$dir.gz" -mtime +$remove_old_days) ]; then
    # 삭제
    rm "$dir.gz"
    echo "$log_date 압축 로그 삭제"
  fi
done