shutdown.shを使用してTomcatの停止をすると、停止がうまくいかない場合がある。
確実に停止させるには、shutdown.shに「-force」をつけると、強制停止(kill)することができる。
強制停止の仕組み
Tomcat起動時に自身のプロセスIDをファイルに書き込み、停止時にファイルに記載されたプロセスをkillするという仕組みになっている。
環境変数 CATALINA_PIDを設定する
forceオプションを使用するには、プロセスIDを書き込むファイルを環境変数「CATALINA_PID」で指定しておく必要がある。
CATALINA_PIDは、「CATALINA_HOME/bin/setenv.sh」に記載するのがよい。
(setenv.shはデフォルトでは存在しないためなければ作成する。)
setenv.sh
CATALINA_PID=/var/run/catalina.pid
Tomcatを起動する
Tomcatの起動は通常と同じ。
[vagrant@localhost bin]$ sudo ./startup.sh
Using CATALINA_BASE: /usr/local/apache-tomcat-7.0.50
Using CATALINA_HOME: /usr/local/apache-tomcat-7.0.50
Using CATALINA_TMPDIR: /usr/local/apache-tomcat-7.0.50/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/apache-tomcat-7.0.50/bin/bootstrap.jar:/usr/local/apache-tomcat-7.0.50/bin/tomcat-juli.jar
Using CATALINA_PID: /var/run/catalina.pid
プロセスIDが、catalina.pidに記録されている。
[vagrant@localhost bin]$ more /var/run/catalina.pid
2639
Tomcatを停止する
Tomcatの停止時には、「-force」オプションを付ける。
[vagrant@localhost bin]$ sudo ./shutdown.sh -force
Using CATALINA_BASE: /usr/local/apache-tomcat-7.0.50
Using CATALINA_HOME: /usr/local/apache-tomcat-7.0.50
Using CATALINA_TMPDIR: /usr/local/apache-tomcat-7.0.50/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/apache-tomcat-7.0.50/bin/bootstrap.jar:/usr/local/apache-tomcat-7.0.50/bin/tomcat-juli.jar
Using CATALINA_PID: /var/run/catalina.pid
最後の行で、catalina.pidに記載されたプロセスが強制killされている。