반응형

tomcat7 서비스 시작 스크립트. update 버전!

전에 restart 스크립트가 장애발생 위험이 있어서 개선이 필요하다고 했다.
catalina.sh에서 CATALINA_PID 경로를 지정했으면, tomcat 구동시 pid 파일이 생성된다.

톰캣 pid 구하는 방법


PID=`cat "$CATALINA_PID"`

현재 pid가 떠 있는지 확인


ps -p $PID > /dev/null 2>&1
if [ $? -eq 0 ] ; then
     echo "process is alive."
else
     echo "process is not found."
fi
  • 주의! ; 스크립트에서 주석도 써줘야 함. (chkconfig에서 인식문제)
  • 아래 스크립트를 /etc/init.d에 생성 (파일명은 서비스명)
  • 서비스 자동시작 추가
  • tomcat 계정으로 서비스를 구동하므로 tomcat 계정이 시스템에 있어야 한다 .

#chkconfig --add tomcat7
#chkconfig --level 2345 tomcat7 on
#chkconfig --list tomcat7

# cat tomcat7
---------------------------------------------------
#!/bin/bash
#
# tomcat     This shell script takes care of starting and stopping Tomcat
#
# chkconfig: - 80 20
#
### BEGIN INIT INFO
# Provides: tomcat
# Required-Start: $network $syslog
# Required-Stop: $network $syslog
# Default-Start:
# Default-Stop:
# Short-Description: start and stop tomcat
### END INIT INFO

TOMCAT_USER=tomcat
TOMCAT_HOME="/usr/tomcat7"
CATALINA_PID=/usr/tomcat7/bin/tomcat.pid
SHUTDOWN_WAIT=45

tomcat_pid() {

#톰캣 pid 구하는 방법
PID=`cat "$CATALINA_PID" 2>&1`
#현재 pid가 떠 있는지 확인
ps -p $PID > /dev/null 2>&1
if [ $? -eq 0 ] ; then
        #     echo "process is alive."
        echo $PID
else
        #     echo "process is not found."
        echo ""
fi
}


start() {
    pid=$(tomcat_pid)
    if [ -n "$pid" ]
    then
        echo "Tomcat is already running (pid: $pid)"
    else
        # Start tomcat
        echo "Starting tomcat"
        /bin/su - -c "cd $TOMCAT_HOME/bin && $TOMCAT_HOME/bin/startup.sh" $TOMCAT_USER
    fi
    return 0
}

stop() {
    pid=$(tomcat_pid)
    if [ -n "$pid" ]
    then
        echo "Stoping Tomcat"
        /bin/su - -c "cd $TOMCAT_HOME/bin && $TOMCAT_HOME/bin/shutdown.sh" $TOMCAT_USER

    let kwait=$SHUTDOWN_WAIT
    count=0
    count_by=5
    until [ `ps -p $pid | grep -c $pid` = '0' ] || [ $count -gt $kwait ]
    do
        echo "Waiting for processes to exit. Timeout before we kill the pid: ${count}/${kwait}"
        sleep $count_by
        let count=$count+$count_by;
    done

    if [ $count -gt $kwait ]; then
        echo "Killing processes which didn't stop after $SHUTDOWN_WAIT seconds"
        kill -9 $pid
    fi
    else
        echo "Tomcat is not running"
    fi

    return 0
}

case $1 in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        start
        ;;
    status)
       pid=$(tomcat_pid)
        if [ -n "$pid" ]
        then
           echo "Tomcat is running with pid: $pid"
        else
           echo "Tomcat is not running"
        fi
        ;;
esac

exit 0

+ Recent posts