728x90
반응형

시작은 단순하다.

실행중인 tomcat 서버의 로그는 계속해서 쌓여만 갔다.

특히 문제는 catalina.out 파일이 용량이 계속 늘어가고 있다는 것 이었다.

이렇게 방치하고 무한정 둔다면 언젠가 서버가 사망하게 되리라...

 

목표는 2가지다.

1. catalina.out 파일을 날짜별로 나눈다.

2. 일정기간 이상 오래된 파일은 삭제한다.

 

이걸 위해 검색해 본 결과 tomcat설치폴더/bin/catalina.sh 파일을 수정하라는 것 이었다.

근데 왠지 나는 실행하면 에러가 나니 검색된 내용을 반영할 수가 없었다.

또한 rotatelogs를 이용하라는데 나는 설치되어 있지 않다.

 

그래서 선택한 방법은 터미널 명령어와 cron이다.

 

1. 파일 관리를 위한 delete_log.sh 파일을 만든다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# tomcat log folder location
TOMCAT_LOG=/tomcat/logs
 
# get today date
DATE="$(date '+%Y-%m-%d')"
 
# back up 'catalina.out' files by date
cp "$TOMCAT_LOG/catalina.out" "$TOMCAT_LOG/catalina.out.$DATE"
 
# catalina.out file reset
cat /dev/null > "$TOMCAT_LOG/catalina.out"
 
# delete file that is 30 days old
find "$TOMCAT_LOG" -mtime +30 -type f -exec rm -f {} \;
cs

내가 참고한 글에서는 5번 라인에 DATE='date +%Y_%m_%d' 라고 되어 있었다.

그러나 실행시 cp: target '+%Y-%m-%d' is not a directory 라는 에러가 났고, 위와 같이 수정 했더니 해결 되었다.

 

(1) 2번 라인은 당신이 tomcat을 설치한 위치로 변경해야 한다.

(2) 1~11번 라인까지는 catalina.out 파일을 오늘 날짜로 백업하고 기존 파일은 초기화 한다.

(3) 14번 라인은 30일 이상된 log 파일을 삭제한다

 

2. delete_log.sh 파일을 배치 시킨다.

이 파일을 원하는 위치에 배치한다. 예를들면 /home/ubuntu 폴더 아래에 둔다.

그리고 실행할 수 있도록 권한을 준다.

1
chmod 744 /home/ubuntu/delete_log.sh
cs

권한을 준 후에 'bash /home/ubuntu/delete_log.sh'를 실행하면

위에 작성한 delete_log.sh의 내용이 현재 시간 기준으로 진행되는 것을 확인 할 수 있다.

 

3. cron을 사용해서 delete_log.sh를 실행할 스케줄을 만들어 준다.

(1) 먼저 해야할 일은 cron을 설치하고 활성화 하는 것이다.

1
2
3
4
5
6
7
8
9
10
11
# cron 설치
apt install -y cron
 
# cron 시작
service cron start
 
# cron systemctl 활성화
systemctl enable cron.service
 
# cron systemctl 등록 확인
systemctl list-unit-files | grep cron
cs

(만약 systemctl 명령어를 찾을 수 없다는 에러가 난다면 'apt install -y systemctl' 를 통해 설치)

 

(2) crontab 편집

1
crontab -e
cs

위 명령어를 입력해서 편집 화면으로 들어간다.

그리고 아래 내용을 가장 하단에 넣고 저장하여 종료한다.

1
2
3
#매일 23시 55분에 터미널 명령어 파일 실행
#분   시   일   월   주   명령어
55    23   *    *    *    /home/ubuntu/delete_log.sh
cs

(3) cron 재시작

1
service cron restart
cs

 

4. 부록 - cron 실행시간 이상

4-1. docker에서

위에 crontab 편집으로 입력한 정보에 따르면 매일밤 23:55에 delete_log.sh 파일이 실행 되어야 한다.

나의 경우 원래 머신의 시간은 런던시간이고, 최초에 서버를 세팅할때 타임존을 한국시간으로 변경하여 사용중이다.

또한 다른 이유로 인해 docker의 시간 역시 한국의 타임존으로 설정해 사용하고 있다.

그런데 cron 실행시간이 런던시간으로 실행되는 것을 확인했다.

검색해 나온 정보들을 적용해 보려했지만 난 잘되지 않았다.

어떻게 해야하나 고민을 했는데 사실 생각해보면 단순하게 해결이 가능하다.

특별한 관리상의 이유가 있는게 아니라면 crontab 편집에서 23시라고 입력한 것을 14시로 입력하면 되는거다.

4-2. docker 없이 ubuntu에서

모종의 이유로 인해 다시 docker의 사용을 멈추고, ubuntu에 tomcat을 사용하고 있으며,

위 설정대로 적용하고, 23:55에 실행되도록 적용했다.

그런데 놀랍게도 이건 또 내가 원하는 한국시간으로 적용되고 있다.

 

* tomcat 관련글

[tomcat] memory leak 에러 : https://deonggi.tistory.com/26
[Tomcat] 실행에러 : https://deonggi.tistory.com/76
[Tomcat] java.lang.IllegalArgumentException... : https://deonggi.tistory.com/77
[tomcat] war 배포하기, 가상 디렉토리 : https://deonggi.tistory.com/126
docker 컨테이너로 tomcat 실행하기 : https://deonggi.tistory.com/159

 

* 참고한 글

 

[Tomcat] catalina.out 파일 날짜 별 백업 및 오래된 로그파일 삭제 (ShellScript, Crontab)

1. Shell Script 파일 생성 [root@hostname ~]# cd /home [root@hostname home]# vi delete_log.sh 2. delete_log.sh에 아래 내용 입력(위치는 예시임) #톰캣 로그 디렉토리 TOMCAT_LOG=/home/tomcat/logs #오늘..

page-view.tistory.com

 

Crontab 설치 및 사용법

Crontab installation and Usage Crontab 설치 - CentOS # cron 설치 sudo yum update -y sudo yum install -y cronie # cron 시작 sudo systemctl start crond # cron systemctl 활성화 sudo systemctl enable cr..

blog.secuof.net

 

728x90
반응형

+ Recent posts