# 2. Web

catalina.out 로그를 날짜별로 관리하기(feat. rotatelogs 없을 때)

둥굴둥굴둥굴레차 2022. 3. 21. 17:40
나는 호스팅 서버에 올라가있는 내 서버를 SSH를 통해 운영하고있다.


유입자수가 많아지다보니 로그가 자연스레 증가하였고,

현재는 모든 날짜에 대한 로그가 catalina.out파일 하나에 저장되어있는 형태인데
한 개의 파일에 몰리다보니 파일크기가 무지 커지고 있어 주기적으로 로그파일을 비워줘야했었다.

파일의 크기가 일정 수준 이상으로 커질 땐 서버가 먹통이 되는 등의 에러가 발생하기 때문이다.

그런데 이러한 작업을 손수 매번 해주는 것은 무리기 때문에 
그날 그날의 날짜에 대한 로그는 따로 저장되도록 만들어주려고 한다.

즉, 로그를 날짜별로 관리하려고 한다.


1. ssh에 접속한 뒤 rotatelogs의 위치를 알아내자.

 

아래 명령어를 통해 rotatelogs파일의 경로를 찾아주면 된다.

$ which roatelogs

 

그랬더니 다음과 같이 경로가 출력되었다. 해당 경로를 기억해두자~

 

 

[참고]

만약 rotatelogs파일이 없다면, 아래의 명령어를 통해 아파치를 다운로드 받아주면 생긴다.

$ sudo yum install httpd

 

 

2. 그리고 내가 운영하는 tomcat서버의 catalina.sh파일 일부를 다음과 같이 수정하였다.

org.apache.catalina.startup.Bootstrap "$@" start | 의 뒷부분에
"2>&1" \| /usr/sbin/rotatelogs "$CATALINA_OUT".%Y-%m-%d 86400 540 "&" 을 추가해주고

>> "$CATALINA_OUT" 2>&1 "&" 부분을
#
로 주석처리 해주었다.

 

catalina.sh 파일

shift
  #touch "$CATALINA_OUT"
  if [ "$1" = "-security" ] ; then
    if [ $have_tty -eq 1 ]; then
      echo "Using Security Manager"
    fi
    shift
    eval $_NOHUP "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
      -D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \
      -classpath "\"$CLASSPATH\"" \
      -Djava.security.manager \
      -Djava.security.policy=="\"$CATALINA_BASE/conf/catalina.policy\"" \
      -Dcatalina.base="\"$CATALINA_BASE\"" \
      -Dcatalina.home="\"$CATALINA_HOME\"" \
      -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
      org.apache.catalina.startup.Bootstrap "$@" start \
      "2>&1" \| /usr/sbin/rotatelogs "$CATALINA_OUT".%Y-%m-%d 86400 540 "&"
      #>> "$CATALINA_OUT" 2>&1 "&"

  else
    eval $_NOHUP "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
      -D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \
      -classpath "\"$CLASSPATH\"" \
      -Dcatalina.base="\"$CATALINA_BASE\"" \
      -Dcatalina.home="\"$CATALINA_HOME\"" \
      -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
      org.apache.catalina.startup.Bootstrap "$@" start \
      "2>&1" \| /usr/sbin/rotatelogs "$CATALINA_OUT".%Y-%m-%d 86400 540 "&"
      #>> "$CATALINA_OUT" 2>&1 "&"

 

자세한 내용은 아래 블로그를 참고!

 

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

서버에 /usr/sbin/rotatelogs 파일이 있어야 사용 가능하다. 없다면 아파치를 설치하면 해당 파일도 설치된다. 1. 설정 [root@hostname ~]# cd /home/tomcat/apache-tomcat-8.5.51/bin [root@hostname bin]# vi ca..

page-view.tistory.com

 

3. 수정내용을 반영하기 위해 tomcat서버의 bin폴더 위치에서 서버를 껐다가 켜주었다.

$ ./shutdown.sh
$ ./startup.sh

 

[참고] 
나는 bin폴더가 아닌 home으로 돌아가서 톰캣서버를 껐다 켰었는데, 서버가 먹통이 되어버린적이 있다.
그래서 톰캣서버를 KILL한뒤 다시 실행시켜주어야 했다.

이와 관련된 내용은 이 링크를 통해 참조해보자.

나의 톰캣에 대한 무지로 인해 발생한 일이었다.
톰캣 서버를 구동하고 중지시키는 스크립트는 bin 디렉터리에 존재하기 때문에
bin위치에서 위 명령어를 실행시켜주어야 한다!

이와 관련된 내용은 아래 링크를 참조해보자.
 

Tomcat의 디렉터리 구성과 용도

디렉터리 구성 bin 톰캣의 바이너리와 실행 스크립트가 있는 디렉터리이다. 이중에서 중요한 용도의 파일들을 정리해 보자. startup.sh 톰캣 구동 스크립트 shutdown.sh 톰캣 종료 스크립트 version.sh 톰

pythontoomuchinformation.tistory.com

 

4. 이제 정상적으로 log가 들어오는지 확인해보자.

로그를 보기 위해 원하는 tomcat서버/logs 위치로 옮겨간 후 아래의 명령어를 사용하여 log를 확인해보자.

(오늘의 날짜가 2022년 3월 21일이니 아래와 같이 명령어를 작성해주었다.)

$ tail -f catalina.out.2022-03-21

 

정상적으로 유입자가 생겼을 때 로그가 뜬다면 서버가 잘 돌아가는 것이다!

 

5. 다음날 logs파일의 목록을 검색해보니 오늘자 날짜로 catalina.out파일이 자동으로 잘 생성된 것을 볼 수 있었다.