banner
李大仁博客

李大仁博客

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

Tomcat進程無法正常停止問題

在 CentOS 中,使用 Catalina.sh 來管理 Tomcat 運行時,執行 Catalina.sh run 後產生的 Tomcat 進程無法使用 Catalina.sh stop -force 來關閉。如果 Catalina.sh 的預設內容用於配置 Tomcat 服務,則 /etc/init.d/tomcat stop 也將失效。

查看 Catalina.sh 文件後找到以下代碼,原來需要 stop 的話,需要 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

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。