쉘 스크립트로 log 파일 정리하기

2019. 10. 5. 23:17임베디드/리눅스시스템프로그래밍

현업에서 많이 쓰이는 쉘 스크립트 예제로, 저장소 용량이 제한적이기 때문에 수시로 log 파일을 정리해야만 한다. 만일 하지 않았을 시 저장소가 넘치게 되고, 서버가 다운될 수 있는 여지가 된다. 따라서 사람이 수시로 작업을 한다기보다는 몇 줄 안되는 쉘 스크립트로 쉽게 구현할 수 있다.

 

쉘 스크립트 프로그래밍을 잘하기 위해선 무엇보다 쉘 명령어에 익숙해져야만 한다. find 명령을 통해 현재 시간 기준으로 며칠이 경과한 파일을 찾을 수 있다

 $ sudo find . -name "*.log" -mtime +3 

위 그림으로 해석한다면  4일이 지난 파일들을 검색하게 된다. 숫자에서 +1을 한 날짜로 계산해야 한다는 점을 주의해야 한다. 만일 3이 지난 파일을 검색하기 위해서는 +2를 해야만 한다

 

2일이 지난 파일은 .gz형식으로 압축을 하고, 3일이 지난 gz파일에 대해서는 삭제를 하는 쉘 스크립트 코드

#!/bin/bash

DIR="/var/log"
cd $DIR
echo "cd $DIR"
filelist=$(ls)
echo ${filelist[*]}

# 압축과 삭제에 대한 기준일자 정하기
GZIPDAY=1
DELDAY=2

# -type f 파일 탐색
# -exec 실행 명령, {}은 해당되는 모든 파일들에 대해서, 반드시 \;은 필수
sudo find . -type f "*.log.?" -mtime +$GZIPDAY -exec bash -c "gzip {}" \; 2>/dev/null
sudo find . -type f "*.gz" -mtime +$DELDAY -exec bash -c "rm -rf {}" \; 2>/dev/null