真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Linux環(huán)境Tomcat不能被shutdown.sh正常關(guān)閉怎么辦

這篇文章給大家分享的是有關(guān)Linux環(huán)境Tomcat不能被shutdown.sh正常關(guān)閉怎么辦的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。

成都創(chuàng)新互聯(lián)是一家專業(yè)提供綏德企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站設(shè)計(jì)制作、網(wǎng)站設(shè)計(jì)、H5建站、小程序制作等業(yè)務(wù)。10年已為綏德眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進(jìn)行中。

問題分析

在Linux環(huán)境下,使用shutdown.sh腳本關(guān)閉Tomcat,經(jīng)常會(huì)出現(xiàn)無法正常關(guān)閉的情況,使用ps -ef命令查看發(fā)現(xiàn)仍然有tomcat的進(jìn)程。

查看linux日志以及源代碼,問題出在WebappClassLoaderBase中,此類為Context的類加載器父類,在容器關(guān)閉時(shí),會(huì)調(diào)用其stop方法,stop方法會(huì)調(diào)用clearReferencesThreads方法

private boolean clearReferencesStopThreads = false;
private void clearReferencesThreads() {
        Thread[] threads = getThreads();
        List executorThreadsToStop = new ArrayList<>();
        // Iterate over the set of threads
        for (Thread thread : threads) {
            if (thread != null) {
                       ...省略其他代碼...
                    // Don't try and stop the threads unless explicitly
                    // configured to do so
                    if (!clearReferencesStopThreads) {
                        continue;
                    }
                   ...省略其他代碼...     
    }

如果存在仍然運(yùn)行的線程,根據(jù)代碼默認(rèn)的配置,則不會(huì)進(jìn)行任何處理,所以tomcat的進(jìn)程仍然會(huì)存在。

解決方案

解決這個(gè)問題的思路為,通過kill命令強(qiáng)制殺掉進(jìn)程,本文提供兩種方案。

1.自己編寫shell腳本

其思路為先查詢到tomcat的進(jìn)程ID,然后殺掉進(jìn)程,具體shell腳本如下:

#!/bin/bash
#TOMCAT_BASE為服務(wù)器上tomcat的bin目錄路徑
export TOMCAT_BASE=/usr/local/tomcat/7.0/bin
echo ' >>> deploy start'
#仍然先運(yùn)行shutdown.sh腳本關(guān)閉tomcat
sh $TOMCAT_BASE/shutdown.sh
#查詢tomcat的進(jìn)程ID,并殺掉該進(jìn)程
pidList=$(ps aux | grep $TOMCAT_BASE | grep -v grep | awk '{print $2}')
for pid in $pidList
do
kill -9 $pid
echo 'kill pid '$pid
done
#啟動(dòng)tomcat
sh $TOMCAT_BASE/startup.sh
echo ' >>> deploy end'

通過以上腳本,可以重啟Tomcat。此方式的風(fēng)險(xiǎn)在于查找tomcat的進(jìn)程ID是否準(zhǔn)確,但可以一并殺掉因人為操作shutdown.sh而未關(guān)閉的進(jìn)程。

2.Tomcat預(yù)留的窗口

在Tomcat的catalina.sh中預(yù)留了該問題的處理窗口,需進(jìn)行以下配置:

  1. 在bin目錄中創(chuàng)建文件,文件名為CATALINA_PID

  2. 在shutdown.sh中增加參數(shù)-force

    exec "$PRGDIR"/"$EXECUTABLE" stop -force  "$@"
  3. 在catalina.sh中最前面增加以下代碼,將變量$CATALINA_PID指向創(chuàng)建的CATALINA_PID文件,在Tomcat啟動(dòng)時(shí),會(huì)將進(jìn)程ID存儲(chǔ)在這個(gè)文件中。

    if [ -z "$CATALINA_PID" ]; then
    CATALINA_PID=$PRGDIR/CATALINA_PID
    fi

感謝各位的閱讀!關(guān)于“Linux環(huán)境Tomcat不能被shutdown.sh正常關(guān)閉怎么辦”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!


網(wǎng)頁名稱:Linux環(huán)境Tomcat不能被shutdown.sh正常關(guān)閉怎么辦
網(wǎng)站網(wǎng)址:http://weahome.cn/article/pececp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部