Linux學習總結(六十五)tomcat啓動腳本

腳本的學習一直不得章法,以前都是囫圇吞棗式的學習,如今決定好好梳理下思路,看看究竟哪裏是弱項。以前詢問一個架構師大神,問shell腳本應該怎麼學習,人家回答了句,shell很簡單啊。如今想一想對於一個編程經驗豐富的人來講shell確實簡單,從我在學校中對c和c++的認識,足以感知到。人的思惟必定是先由總體再到過程。對於一個程序的開發來講,必定是先從總體邏輯框架再到具體細節處理。接下來我從一個腳本中去尋找個人知識的短板。java

題目要求:
在生產環境中,常常遇到tomcat沒法完全關閉,也就是說用tomcat自帶的shutdown.sh腳本沒法將java進程徹底關掉。因此須要藉助shell腳本,將進程殺死,而後再啓動。
寫個shell腳本,實現上述功能。備註:完全殺死一個進程的命令是kill -9 pidc++

題目分析:
1 題目要求腳本完成兩個任務,關閉java進程和成功啓動tomcat服務。因此它應該分爲兩部分:關閉和啓動。就目前題目要求來講,咱們只須要寫stop和start兩個函數,而後分別調用函數便可。若是咱們要將其作成一個/etc/init.d/ 下面的啓動腳本。那麼只須要再該腳本基礎上加上case 結構,能夠執行stop和start選項。若是還須要一個重啓功能,那麼再定義一個restart函數,restsat功能就是先stop再start。在case多加一個條件就能夠。shell

2 過程當中須要注意的細節。 kill -9 殺進程比較危險有可能會致使一些數據丟失,儘可能少用。
3 啓動後要檢查是否啓動成功,能夠經過是否存在java進程來判斷。編程

腳本的總體框架就是:vim

#!/bin/bash
tomcatdir=/usr/local/tomcat

stop()
{
}

start()
{
}
stop
start

具體代碼爲tomcat

#!/bin/bash
tomcatdir=/usr/local/tomcat    //指定tomcat的安裝路徑

stop()
{
    echo -n "stopping tomcat."
    killall java
    i=0
    while [ $i -lt 10 ]
    do
        if pgrep -l java &> dev/null    //pgrep -l 顯示進程名及pid,有數據表示非空,爲真。
    then
        killall java
        sleep 1
        echo -n "."    //每嘗試一次輸出一個點,給出狀態提示。
        i=$[$i+1]
    else
        echo -e "\033[32m[0k]\033[0m"  //輸出綠色的帶中括號的ok字符
        break
    fi
    done
//程序一進來先用killall嘗試殺一遍進程,若是成功直接顯示綠色字體的[ok]退出,若是失敗,則再嘗試10次。
    if pgrep -l java &> /dev/null
    then
    pgrep java |xargs kill -9 &> /dev/null   // xargs 表示對列出的每一個進程都殺一次
    sleep 1
    pgrep java |xargs kill -9 &> /dev/null
    fi
    if pgrep java &> /dev/null
    then
    echo "java 進程殺不掉,請檢查"
    exit
    fi
// 再次檢查進程,若是還存在,用kill -9 強制殺,嘗試兩次。殺不死,輸出提示信息。
}

start()
{
    cd $tomcatdir
    echo -n "starting tomcat."
    ./bin/startup.sh 2>/tmp/start_tomcat.log
    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[0k]\033[0m"
        break
    fi
    done
    if ! pgrep java &> /dev/null
    then
    cat /tmp/start_tomcat.log
    echo "tomcat 沒法啓動,請檢查。"
    fi
}
// 程序一進來先嚐試啓動一次,若是成功直接輸出ok,若是還沒找掉進程,則嘗試三次。仍是失敗的話,給出提示退出。
if ! rpm -q psmisc &> /dev/null
then
    echo "安裝psmic包。"
    yum install -y psmisc
fi
// 在調用函數以前,檢查帶有killall命令的包是否安裝,沒有使用yum安裝。
stop
start

封裝爲能夠開機啓動的腳本bash

vim /etc/init.d/tomcatd
#!/bin/bash
#chkconfig: 2345 80 20
#############################################################################
#this scripts is about tomcat start or stop
#############################################################################
function usage(){
    echo "$0 {start|stop|restart}"
}

if [ $# -ne 1 ];then
    usage
    exit 1
fi
tomcatdir=/usr/local/tomcat
start()
{
    cd $tomcatdir
    echo -n "starting tomcat."
    ./bin/startup.sh 2>/tmp/start_tomcat.log
    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[0k]\033[0m"
        break
    fi
    done
    if ! pgrep java &> /dev/null
    then
    cat /tmp/start_tomcat.log
    echo "tomcat 沒法啓動,請檢查。"
    fi
}
stop()
{
    echo -n "stopping tomcat."
    killall java
    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[0k]\033[0m"  
        break
    fi
    done
    if pgrep -l java &> /dev/null
    then
    pgrep java |xargs kill -9 &> /dev/null   
    sleep 1
    pgrep java |xargs kill -9 &> /dev/null
    fi
    if pgrep java &> /dev/null
    then
    echo "java 進程殺不掉,請檢查"
    exit
    fi
}
restart()
{ 
stop
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restat
;;
esac
相關文章
相關標籤/搜索