티스토리 뷰
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 를 통해 정상적으로 실행이 되는지 확인해 보도록 한다.
'OS > Linux' 카테고리의 다른 글
linux에서 서버간 SSH 연결이 안될때 hosts.allow 설정 (0) | 2020.07.22 |
---|---|
CentOS (linux) 에서 JAVA 설치하기 (openjdk11) (0) | 2020.07.17 |
CentOS (linux) 에서 사용자 추가 및 폴더 권한 설정하기 (0) | 2020.07.17 |
rc.local 을 이용해 서버 부팅시 Jenkins, SVN, Sonarqube 자동 실행하기 (0) | 2020.06.19 |
Shell script 문자열 앞뒤 공백 지우기 (trim) (0) | 2020.06.17 |