9. 啟動、關閉tomcat

最愛喝酸奶發表於2019-01-26

在生產環境下,經常會遇到tomcat無法徹底關閉,也就是用tomcat自帶的shutdown.sh指令碼無法將java程式完全關掉。所以需要藉助shell指令碼,將程式殺死,然後再啟動。本案例就要寫一個指令碼來實現上述功能。另外,徹底殺死一個程式的命令是 kill -9 pid

具體要求如下:

1)不僅要徹底關閉java程式,還要成功啟動tomcat服務;

2)kill -9 殺程式比較危險,有可能會導致一些資料丟失,儘量不要加 -9 ,實在殺不掉時使用 -9 ;

3)啟動後要檢查是否啟動成功,通過是否有java程式存在來判斷是否啟動成功。

具體程式碼如下:

#!/bin/bash
#用於關閉、啟動tomcat服務

if ! rpm -q psmisc &>/dev/null
then
    yum install -y psmisc           #沒有killall命令就安裝
fi

tomcat_dir=/usr/local/tomcat

stop()
{
    echo -n "stopping tomcat."
    killall java
    #systemctl stop tomcat
    
    i=0
    while [ $i -lt 10 ]
    do
        if pgrep -l java &>/dev/null 
        then
            killall java
            sleep 1
            echo -n "."
            i=$[$i+1]
        else
            echo -e "\033[32m[ok]\033[0m"
            break
        fi
    done
    
    if pgrep -l java &>/dev/null
    then
        pgrep java |xargs kill -9 2>/dev/null
        sleep 1
        pgrep java |xargs kill -9 2>/dev/null
    fi
    
    if pgrep java &>/dev/null
    then
        echo -e "\033[31m"java程式殺不掉"\033[0m"
        exit
    fi
}

start()
{
    cd $tomcat_dir
    echo -n "starting tomcat."
    ./bin/startup.sh 2>/tmp/start_tomcat.log
    #systemctl start tomcat
    
    i=0
    while [ $i -lt 3 ]
    do
        if ! pgrep java &>/dev/null
        then
            ./bin/startup.sh 2>/tmp/start_tomcat.log
            echo -n "."
            i=$[$i+1]
        else
            echo -e "\033[32m[ok]\033[0m"
            break
        fi
    done
    
    if ! pgrep java &>/dev/null
    then
        echo
        cat /tmp/start_tomcat.log
        echo -e "\033[31m"tomcat無法啟動,請檢查"\033[0m"
    fi
}

stop
start

相關文章