banner
李大仁博客

李大仁博客

天地虽大,但有一念向善,心存良知,虽凡夫俗子,皆可为圣贤。

Tomcatプロセスが正常に停止できない問題

CentOS では、Catalina.sh を使用して Tomcat の実行時を管理します。Catalina.sh run を実行した後、生成された Tomcat プロセスは Catalina.sh stop -force を使用して正常に停止できません。Catalina.sh のデフォルトの内容で Tomcat サービスを構成している場合、/etc/init.d/tomcat stop も無効になります。

Catalina.sh ファイルを確認した後、以下のコードを見つけました。実際に停止するには、CATALINA_PID ファイルが必要です。Catalina.sh の 468 行目

if [ ! -z "$CATALINA_PID" ]; then
if [ -f "$CATALINA_PID" ]; then
if [ -s "$CATALINA_PID" ]; then
kill -0 `cat "$CATALINA_PID"` >/dev/null 2>&1
if [ $? -gt 0 ]; then
echo "PID ファイルが見つかりましたが、一致するプロセスが見つかりませんでした。停止が中止されました。"
exit 1
fi
else
echo "PID ファイルが空であり、無視されました。"
fi
else
echo "\$CATALINA_PID が設定されていますが、指定されたファイルが存在しません。Tomcat は実行中ですか?停止が中止されました。"
exit 1
fi
fi

CATALINA_PID の説明内容 Catalina.sh の 89 行目

# CATALINA_PID (オプション) catalina 起動 java プロセスの pid を含むファイルのパス

start(fork)が使用される場合#

解決策は、Catalina.sh の環境変数を設定する際に、CATALINA_PID 変数を追加することです。

#pid ファイルを作成する
touch /usr/local/tomcat/logs/tomcat.pid

/etc/init.d/tomcat のヘッダーに環境変数の設定を追加する#

sed -i '1a\. /etc/init.d/functions' /etc/init.d/tomcat
sed -i '2a\:' /etc/init.d/tomcat
sed -i '3a\JAVA_HOME=/usr/local/jdk' /etc/init.d/tomcat
sed -i '4a\CATALINA_BASE=/usr/local/tomcat' /etc/init.d/tomcat
sed -i '5a\CATALINA_HOME=/usr/local/tomcat' /etc/init.d/tomcat

PID ファイルの場所を追加する#

sed -i ‘6a\CATALINA_PID=/usr/local/tomcat/logs/tomcat.pid' /etc/init.d/tomcat

最後に、Catalina.sh を使用して Tomcat を単独で実行する場合は、$CATALINA_HOME/bin に setenv.sh を作成する方法をお勧めします。

参考 http://lovesoo.org/tomcat-process-fails-to-stop-problem-solving.html

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。