모든 J2EE 서버는 기본적으로 Background로 수행되면서 down되어서는 안되지만 부득이 다운되는 경우가 있을 수 있다. 이를 실시간 모니터링하여 관리하여야 하지만 이를 위해 드는 비용이 만만치 않으므로
여기서는 unix 혹은 linux의 cron 데몬을 이용하여 JBoss 서버를 자동실행 시키는 팁을 알아보기로 한다.


우선 cron은 JBoss 서버가 운영중인 경우는 또 다른 JBoss 서버를 실행하지 않아야 한다.
이를 위해서는 cron은 JBoss가 운영중인 경우와 그렇지 않은 경우를 판단해야 하며,
이를 위해서는 간단한 shell 스크립트와 약간의 트릭이면 충분하다.

shell 스크립트에 담길 내용은 unix,linux 의 ps -ef command를 이용하여 JBoss서버를 찾아내는 것이며,
트릭은 JBoss를 실행할 때 -Dproject=sarah 등으로 실행에는 의미없는 독특한 스트링을 command line 인자에 추가하는 것이다. 나는 추가하는 인자값으로 프로젝트 코드명을 주로 이용한다.  

1. run.conf를 아래와 같이 수정한다.
JBOSS_HOME/bin/run.conf 파일을 열어 다음과 같이 -Dproject=sarah라고  단순히 덧붙인다.

if [ "x$JAVA_OPTS" = "x" ]; then
   JAVA_OPTS="-Xms1024m -Xmx1024m -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Dproject=sarah"
fi

이렇게 해주면 JBoss가 실행될 때 항상 -Dproject=sarah 라는 스트링이 command line 인자로 덧붙여진다. 물론 실제로는 아무 의미가 없다.

2. shell 스크립트를 작성한다.
shell script의 이름을 JBOSS_HOME/bin/runserver.sh로 가정하자.

shell>vi runserver.sh <enter>

#!/bin/sh

pid=$(ps -ef |grep -v grep | grep "Dproject=" |awk {'print $2'})
if [[ $pid = "" ]]
then
    echo "server is dead";

    . /etc/profile                  -> 환경변수를 지정하는 트릭
    . /etc/bashrc                 -> 환경변수를 지정하는 트릭
    cd $JBOSS_HOME/bin
    sh run.sh -b0.0.0.0
fi

JBoss를 실행하는 프로세스는 java 인데 아마도 여러개의 java 프로세가 있을 것이다. 그중 JBoss를 의미하는 java 프로세스를 정확하게 알아내기 위해 grep "Dproject=sarah"를 이용하였다.

아래 부분은 cron이 JBoss를 실행하기 위해 필요한 환경변수를 setting 할려고 하는 것인데
기본적으로 LANG,JAVA_HOME,JBOSS_HOME등은 반드시 지정해주어야 한다.
위에서 사용한 트릭대신에 실제로 필요한 환경변수를 일일이 지정해주는 것을 권한다.

그리고 runserver.sh 를 실행 모드로 변경한다.
shell>chmod 0755 runserver.sh <enter>

3. crontab 에 등록한다.
shell> vi sarah.crontab <enter>

#------    --------  ---------------------------------------------------
#필  드    의  미    범  위
#------    --------  ---------------------------------------------------
#첫번째    분        0-59
#두번째    시        0-23
#세번째    일        0-31
#네번째    월        1-12
#다섯번째  요일      0-7 (0 또는 7=일요일, 1=월, 2=화,...)
#여섯번째  명령어    실행할 명령을 한줄로 쓴다.
#------    --------  ---------------------------------------------------
#
0-59 * * * * /.../runserver.sh 1> /dev/null 2>&1

위의 crontab 파일은 매 1분마다 JBoss 서버가 운영죽인지 다운되었는지 확인하고 다운되어 있으면 실행시키는 의미가 된다.

shell>crontab sarah.crontab <enter>
shell>crontab -l <enter>
#------    --------  ---------------------------------------------------
#필  드    의  미    범  위
#------    --------  ---------------------------------------------------
#첫번째    분        0-59
#두번째    시        0-23
#세번째    일        0-31
#네번째    월        1-12
#다섯번째  요일      0-7 (0 또는 7=일요일, 1=월, 2=화,...)
#여섯번째  명령어    실행할 명령을 한줄로 쓴다.
#------    --------  ---------------------------------------------------
#
0-59 * * * * /home/java/sarah/admin/runserver.sh 1> /dev/null 2>&1

이와 같이 되었으면 제대로 등록된 것이며
1분 후에 자동으로 JBoss가 실행되고 있는 지 확인 해보면 된다.

4. Shutdown script
shutdown 스크립트는 runserver.sh와 같이 작성할 수 있는데 간단한 예는 다음과 같다.
shell>vi termserver.sh

kill `ps -ef |grep "Dproject=xbrl" |grep -v grep | awk {'print $2'}`

이래도 down되지 않는다면
shell>vi killserver.sh

kill -9 `ps -ef |grep "Dproject=xbrl" |grep -v grep | awk {'print $2'}`

일반적으로 JBoss를 shutdown 시킬때는

JBoss 홈디렉토리 아래 bin 디렉토리에 보면 shutdown.sh 라는 스크립트가 있다.

host> sh shutdown.sh -S -s 서버IP <enter>
치면 된다. 여기서 서버IP는 JBoss를 실행시킬때 -b 옵션으로 준 바인드되는 IP면 된다.
서버이름으로 해도 좋고...

Posted by
,