본문 바로가기
오라클/WebLogic

[웹로직] 노헙로그 로테이션(nohup rotation)

by sangyeon 2021. 7. 26.
728x90

WebLogic Server에서 컨트롤 가능한 로그는 웹로직 자체의 서버로그액세스 로그가 있다.

이 외에 노헙로그와 GC 로그가 존재하기는 하지만..

GC로그는 JVM 옵션이기 때문에 웹로직에서 강제로 로테이션 하는 방법은 존재하지 않고 다만 JVM 프로세스가 재기동할 때 기동 스크립트에서 로테이션 시키는 방법이 존재한다.

이번에 다룰 노헙로그의 경우에는 nohup이라는 리눅스 명령어를 통해 stdout 표준에러로그 (어플리케이션 단 로그)를 웹로직 서버로그와 함께 따로 빼는 것이기에 웹로직에서 컨트롤 할 수 없는 부분이다.

여기서 잠깐, nohup이란?
: 리눅스/유닉스 시스템에서 쉘 스크립트 파일(*.sh)을 데몬형태로 실행 시키는 프로그램이다.
이로 인해 터미널 세션이 끊겨도 실행을 멈추지 않고 동작할 수 있다.

#1. nohup 로그 로테이션하는 두 가지 방법

위에서 저렇게 이야기했지만, 노헙 로그를 로테이션 하는 방법이 아예 존재하지 않는 것은 아니다.

두 가지 방법이 있다.

# 1-1 Perl 이용 방법

첫 번째 방법은 OS의 perl이라는 명령어를 통해 가능하다.

여기서는 누군가 만들어준 감사한 perl 스크립트를 통해 로테이션 하는 방법을 설명할 것이다.

- LOGS.pl 파일을 도메인 홈에 위치시키고, 해당 파일에 실행 권한을 주어야 한다.

- LOGS.pl을 적용할 기동 스크립트를 아래와 같이 수정한다.

* 굵게 표시된 부분은 한 줄로 입력되어야 하기 때문에 주의 바람.

# AdminServer Start Script


--- 중략 ---
# log rotation
#if [ -f ${USERLOG_HOME}/nohup/nohup_${SERVER_NAME}.out ]; then
# mv ${USERLOG_HOME}/nohup/nohup_${SERVER_NAME}.out ${USERLOG_HOME}/nohup/nohup_${SERVER_NAME}.out.${DATE}
#fi


# startup
echo "<`date`> Starting ${SERVER_NAME} Server..."
#nohup ${DOMAIN_HOME}/bin/startWebLogic.sh > ${USERLOG_HOME}/nohup/nohup_${SERVER_NAME}.out 2>&1 &
nohup ${DOMAIN_HOME}/bin/startWebLogic.sh | perl LOGS.pl -ignoreConsole -rotation %02d%02d%02d -append -applyPfx ${USERLOG_HOME}/nohup/nohup_${SERVER_NAME}.out. 2>&1 &


# log
sleep 1
#tail -100f ${USERLOG_HOME}/nohup/nohup_${SERVER_NAME}.out
tail -100f ${USERLOG_HOME}/nohup/nohup_${SERVER_NAME}.out.`date +'%y%m%d'`


########################################################################################################################################################


# ManagedServer Start Script


--- 중략 ----


# log rotation
#if [ -f ${USERLOG_HOME}/nohup/nohup_${SERVER_NAME}.out ]; then
# mv ${USERLOG_HOME}/nohup/nohup_${SERVER_NAME}.out ${USERLOG_HOME}/nohup/nohup_${SERVER_NAME}.out.${DATE}
#fi


# startup
echo "<`date`> Starting ${SERVER_NAME} Server..."
#nohup ${DOMAIN_HOME}/bin/startManagedWebLogic.sh ${SERVER_NAME} ${ADMIN_URL} > ${USERLOG_HOME}/nohup/nohup_${SERVER_NAME}.out 2>&1 &
nohup ${DOMAIN_HOME}/bin/startWebLogic.sh | perl LOGS.pl -ignoreConsole -rotation %02d%02d%02d -append -applyPfx ${USERLOG_HOME}/nohup/nohup_${SERVER_NAME}.out. 2>&1 &




# log
sleep 1
#tail -100f ${USERLOG_HOME}/nohup/nohup_${SERVER_NAME}.out
tail -100f ${USERLOG_HOME}/nohup/nohup_${SERVER_NAME}.out.`date +'%y%m%d'`

- 해당 펄은 일별로 로테이션 하게끔 설정되어 있어서 빨간 부분만 수정하면 이 후에 웹로직 기동 후 정지할 때 까지 알아서 로테이션 해준다.

# 1-2 쉘 스크립트를 이용한 로테이션 방법

두 번째 방법은 쉘 스크립트를 만들어서 강제로 로테이션 시키는 방법이다.

1-2-1. 작업 전 웹로직 기동 스크립트 수정

# AdminServer Start Script


수정 전 : nohup ${DOMAIN_HOME}/bin/startWebLogic.sh > ${NOHUP_LOG_HOME}/${LOG_FILENM} 2>&1 &
수정 후 : nohup ${DOMAIN_HOME}/bin/startWebLogic.sh >> ${NOHUP_LOG_HOME}/${LOG_FILENM} 2>&1 &


# ManagedServer Start Script


수정 전 : nohup ${DOMAIN_HOME}/bin/startManagedWebLogic.sh ${SERVER_NAME} ${ADMIN_URL} > ${NOHUP_LOG_HOME}/${LOG_FILENM} 2>&1 &
수정 : nohup ${DOMAIN_HOME}/bin/startManagedWebLogic.sh ${SERVER_NAME} ${ADMIN_URL} >> ${NOHUP_LOG_HOME}/${LOG_FILENM} 2>&1 &

- 여기서 중요한 부분은 수정한 부분이 ${ADMIN_URL} 뒤에 ‘>’(write) 에서 ‘>>’(append)로 변경했다는 점입니다.

1번 LOGS.pl 방법을 사용할 때도 해당 부분에서 -append 옵션을 넣어준 것을 볼 수 있습니다. 만약 위 부분이 ‘>>’이 아니라 ‘>’로 설정하게 되면 정상적으로 로테이션이 되지 않고 기존 파일에 이어서 쓰게 됩니다.

1-2-2. 로테이션 시킬 스크립트 생성

# log.sh


# Server_start_script
SERVER_NAME="M2"
DATE_TIME=`date +'%y%m%d_%H%M%S'`
DOMAIN_HOME="/sw/domains/base_domain"

#log directory
LOG_HOME="/sw/domains/base_domain/logs/${SERVER_NAME}"
NOHUP_LOG_HOME="${LOG_HOME}/nohup"
LOG_FILENM="${SERVER_NAME}_stdout.log"
NOHUP_LOG_FILENM="${SERVER_NAME}_stdout.log_${DATE_TIME}"

cp ${NOHUP_LOG_HOME}/${LOG_FILENM} ${NOHUP_LOG_HOME}/${NOHUP_LOG_FILENM}
cat /dev/null > ${NOHUP_LOG_HOME}/${LOG_FILENM}

1-2-3. WLS 기동 후 log.sh 쉘을 실행하면 기존에 쌓던 nohup log를 cp로 백업하고 null copy를 통해 현재 쌓고 있는 nohup log 사이즈를 0으로 변경

1-2-4. log.sh를 crontab(스케쥴링)에 설정

# crontab –l -> 현재 등록된 작업 확인
# crontab –e -> crontab 편집하기

예)
[oracle@olr7 base_domain]$ crontab -l
30 17 * * * sh /sw/domains/base_domain/log.sh

- 위와 같이 설정하면 매일 17:30분에 log.sh을 실행하여 웹로직 로그를 로테이션 시키겠다는 뜻

이런 식으로 특정 시간대에 로그를 로테이션 시키는 방법도 있다.

* LOGS.pl파일은 아래 내용 참조

LOGS.pl.zip
0.00MB

 

 

오늘의 한줄평.

IT에서 안되는 것은 없다.

728x90