티스토리 뷰

logback이라던지 log4j2 등 비교적 최근에 나온 logging framework을 사용하면 appender를 이용해 시간이 오래 된 로그를 삭제할 수 있지만 그 전에 나온 log4j 등의 logging framework은 이런 기능이 없다. 

따라서 서버에서 오래된 로그를 주기적으로 직접 지워줘야 하는데 이때 사용할수 있는 방법이다. 

 

일단 적당한 위치에 다음과 같은 Shell Script를 작성한다. 

 

#!/bin/sh
echo "#################### `date` delete log list ###########################" >> /logs/old/deleteOldLog.log
find /logs -mtime +30 -type f -ls >> /logs/old/deleteOldLog.log
find /logs -mtime +30 -type f -ls -exec rm -r {} \;

 

다 작성하고 나면 실행권한도 준다.

$ chmod 755 /xxx/deleteOldLog.sh

 

find 명령어를 활용해 /logs 하위의 폴더에서 30일이 지난 파일 type의 로그를 /logs/old/deleteOldLog.log 에 기록하고 지운다는 내용이다. find /logs -mtime +30 -type f -ls >> /logs/old/deleteOldLog.log 를 해주는 이유는 find /logs -mtime +30 -type f -ls -exec rm -r {} \; 만 실행시켰을때는 아무런 로그가 남지 않아서 무슨 파일을 지웠는지 모르기 때문에 정보성으로 남겨 놓는것이다. 이걸 응용하여 백업파일이나 오래된 파일들을 자동으로 삭제할 수 있다. 

 

이 script를 바로 실행하면 해당 디렉토리 아래의 30일이 지난 파일들이 자동으로 삭제된다. 매일매일 서버에 들어와서 이걸 실행하지 않으려면 이 script를 crontab에 등록해서 사용하면 된다. 

crontab은 리눅스에 내장된 스케쥴러 같은 개념이라고 보면 되고 사용법은 아주 간단하다. 

 

- 현재 크론탭에는 어떤 내용이 들었나 확인
$ crontab -l

- 크론탭 편집
$ crontab -e

 

이 두가지만 알고 있으면 되고 위의 script를 등록하기 위해 crontab -e 를 치고 들어가서 다음과 같이 crontab을 작성하면 된다. crontab을 작성할때는 Cron Expression을 사용해야 한다. 

 

Cron Expression 간단 설명

 

주기 설정
*(분 0-59) *시(0-23) *일(1-31) *월(1-12) *요일(0-7)       ( space로 구분하여 입력한다.)
 
* * * * * /xxx/deleteOldLog.sh            #매분 deleteOldLog.sh 실행

*/3 * * * * /xxx/deleteOldLog.sh         #3분마다 간격실행
0 5 * * * /xxx/deleteOldLog.sh           #매일 5시에 실행 

0,20,40 * * * * /xxx/deleteOldLog.sh    #매일 매시간 0, 20, 40분 반복실행 

 

crontab은 별도로 실행을 시키는 것이 없고 작성하고 저장하는 순간부터 스케쥴링이 시작된다. 

다 작성했으면 저장 후 deleteOldLog.log 를 통해 정상적으로 실행이 되는지 확인해 보도록 한다. 

댓글
최근에 올라온 글
최근에 달린 댓글
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31