[CRONTAB] 크론탭을 이용하여 무중단 톰켓 서버 만들기

Published on: 2013. 11. 14. 13:21 by louis.dev
서버를 운영하다 보면 여러가지 이유때문에 서버가 다운되는 경우가 발생을 하게 됩니다. 대부분의 경우 톰캣 스크립트를 통해 서버를 재시작 시켜주기만 하면 되는 간단한 작업이지만, 휴가를 가거나 오랜기간 컴퓨터앞에 앉아 있을 수가 없게 되었을때 서버 다운이 발생하면 속수무책으로 당할수 밖에 없습니다. 그리고 이런 문제가 자주 발생하게 된다면 사용자들은 해당 서비스를 신뢰할수 없게 될것입니다. 이런 때를 대비해서 쉘 스크립트를 통해 톰켓 서버의 상태를 체크 하여 서버가 다운되었을때 재실행 시키는 스크립트를 작성하고, CRONTAB을 이용하여 주기적으로 서버의 상태를 체크하게 하면 그나마 나은 서비스가 될수 있을 것입니다. 아래의 스크립트 내용은 톰켓의 상태를 체크하여 프로세스가 죽어 있으면 스크립트를 실행하여 서버를 재시작 시키는 스크립트 입니다.
#!/bin/bash

export JAVA_HOME=사용자들의 JAVA_HOME
export PATH=$PATH:$JAVA_HOME/bin
export CATALINA_HOME=톰켓 설치 위치
export PATH=$PATH:$CATALINA_HOME/bin

if [ -z "`ps -eaf | grep java| grep tomcat`" ]; then
        $CATALINA_HOME'/bin/startup.sh'
        END_TIME=`date +%m/%d' '%H:%M:%S`
        echo "["$END_TIME"] tomcat restart.."
fi
기본적으로 JAVA_HOME같은 환경변수들은 JDK를 설치할때 세팅을 해줌에도 불구하고 스크립트에서 다시 export 시키는 이유는 crontab에서 스크립트를 실행하면 .bash_profile이나 /etc/profile 에 JAVA_HOME, PATH같은 환경변수를 선언해 두었더라도 환경변수를 읽을 수 없어 톰캣실행이 잘 되지 않습니다. 그렇기 때문에 톰켓을 실행시키기 위한 필수 환경변수들을 스크립트에 다시 한번 선언해 주어야 합니다. 이후 해당 스크립트를 CRONTAB에 등록하면 되는데, CRONTAB에 스크립트를 등록하는 방식은 다음과 같습니다.
$ crontab -e
##vi 에디터가 실행되면 다음의 내용을 추가합니다.
*/5 * * * * /스크립트 경로/tomcat_checker.sh >> /data/log/tomcat-restart.log 2>&1
따로 cron expression은 설명하지 않겠습니다. 위의 뜻은 5분마다 tomcat_checker.sh 스크립트를 실행시키고 그에 따른 결과 로그를 tomcat-restart.log에 append(>>) 하겠다는 뜻입니다. 위와 같이 설정한 후 root 권한으로 crontab을 재시작 시키면 crontab이 적용되게 됩니다.
$ su
# /sbin/service crond restart
그리고 crontab -l 명령어로 해당 crontab에 스케줄러가 잘 등록이 되었는지 확인 하면 됩니다.