てきとうなメモ

本の感想とか技術メモとか

Tomcat6が終了できない対策

catalina.shを実行してもなかなか終了してくれない場合があって、再起動するときに

catalina.sh stop
catalina.sh start

とスクリプトで実行すると失敗することがある。

で、ubuntuの起動スクリプトとかだと以下のようになっている。

  log_daemon_msg "Stopping $DESC" "$NAME"

  set +e
  if [ -f "$CATALINA_PID" ]; then 
    start-stop-daemon --stop --pidfile "$CATALINA_PID" \
      --user "$TOMCAT6_USER" \
      --retry=TERM/20/KILL/5 >/dev/null
    if [ $? -eq 1 ]; then
      log_progress_msg "$DESC is not running but pid file exists, cleaning up"
    elif [ $? -eq 3 ]; then
      PID="`cat $CATALINA_PID`"
      log_failure_msg "Failed to stop $NAME (pid $PID)"
      exit 1
    fi  
    rm -f "$CATALINA_PID"
    rm -rf "$JVM_TMP"
  else
    log_progress_msg "(not running)"
  fi  
  log_end_msg 0
  set -e

start-stop-daemonの--retry=TERM/20/KILL/5の部分はTERM送って20秒待ってKILL送って5秒待つという意味。

start-stop-daemonがないけど自力で書きたくない場合は、一応catalina.shの中でも似たようなことをやっているのでそっちでも少し代用可能。

$ catalina.sh 20 -force

とやるとTomcatに終了処理を命じた後に、20秒待って、それでも終了していなければ、強制的に終了するということになる。