天天看點

Shell腳本之tomcat啟動腳本解讀

Shell 是一個用C語言編寫的程式,它是使用者使用Linux的橋梁。Shell既是一種指令語言,又是一種程式設計語言。

Shell 是指一種應用程式,這個應用程式提供了一個界面,使用者通過這個界面通路作業系統核心的服務。

可以在菜鳥教程進行學習 http://www.runoob.com/linux/linux-shell-basic-operators.html

基本思路:把現有的正在運作的tomcat停掉,解壓war包,放到tomcat目錄下,清緩存,再啟動

兩個所需腳本deploy.sh和restart.sh都放在tomcat/bin目錄下

現在對啟動腳本進行解析,示範釋出啟動tomcat,執行指令 bin/deploy.sh+要釋出的war包

bin/deploy.sh (要釋出的war包)
           

打包釋出腳本deploy.sh腳本

#!/bin/sh

war=$1
bin=$(cd `dirname $0`; pwd)

if [ ! -n "${war}" ]; then
   echo "***Usage: $0 [project.war]"
   exit 0
fi
if [ ! -f "${war}" ]; then
    echo "***Error: ${war} does not exist."
    exit 0
fi
if [ ! "${war##*.}" = "war" ]; then
    echo "***Error: ${war} is not a war file."
    exit 0
fi

echo "Deploy ${war##*/}..."
rm -rf ${bin}/../webapps/ROOT/ && unzip -qo ${war} -d ${bin}/../webapps/ROOT/
rm -rf ${bin}/../work/Catalina/localhost/
echo "Restart tomcat..."
exec ${bin}/restart.sh

           

第一行 #!/bin/sh 雖然是注釋,但是也不可省略,表明一種格式。

第三行 war=$1 是将傳進來的值賦給 war 這個變量, $1 就是啟動指令./bin/deploy.sh後邊的參數,也就是(要釋出的war包),實際上就是war包的路徑檔案。

第四行 bin=$(cd `dirname $0`; pwd) ,“ $0 ”代表bin/deploy.sh,是以“ dirname $0 ”是bin, cd 進到bin目錄之後執行pwd查出全路徑,一般是/usr/xxx/xxx/tomcat/bin,再把這個路徑賦給 bin 。

第六到九行 if語句 ,條件語句中的 -n 檢測字元串長度是否為0,是以就是在檢測是否有傳值進來,沒有就提示“要傳值啦”。

第十到十三 if語句 ,條件語句中的 -f 檢測檔案是否是普通檔案,是以就是在檢測傳的是不是一個檔案,沒有就提示“包不存在”。

第十四到十七 if語句 ,條件語句中的 ##*. 實在取字尾擴充名,是以就是在檢測是否是一個“war”包,不是就提示“這個不是war包啦”。

第十九行 echo “Deploy ${war##*/}…” ,輸出列印日志。

第二十行 rm 删除指令, && 前半段是删除tomcat目錄下的那個ROOT檔案夾,後半段是解壓傳進來那個war包并安裝到這個ROOT路徑下。簡單來說就是替換掉。

第二十一行 rm 删除指令,删除日志資訊。

第二十二行 echo “Restart tomcat…” ,輸出“正在重新開機tomcat”讓你開心下。

第二十三行 exec ${bin}/restart.sh 執行restart.sh檔案,這個檔案就是啟動檔案。

啟動腳本restart.sh腳本

#!/bin/sh

bin=$(cd `dirname $0`; pwd)
pid=$(ps aux | grep tomcat | grep -v grep | grep -v restart | grep ${bin} | awk '{print $2}')
if [ -n "${pid}" ]; then
   echo "Shutdown..."
   sh ${bin}/shutdown.sh
   sleep 3

    pid=$(ps aux | grep tomcat | grep -v grep | grep -v restart | grep ${bin} | awk '{print $2}')
    if [ -n "${pid}" ]; then
        kill -9 ${pid}
        sleep 1
    fi
fi

echo "Startup..."
sh ${bin}/startup.sh
if [ "$1" = "-v" ]; then
    tail -f ${bin}/../logs/catalina.out
fi

           

第一行 #!/bin/sh ,格式很重要。

第三行 bin=$(cd`dirname $0`; pwd) ,跟上邊一樣,擷取tomcat下bin的全路徑賦給bin。

第四行一串的管道,其實就是在查出正在運作的tomcat程序。

第五到十五行的 if語句 ,

  • 第五行檢測tomcat程序是否存在,也就是是否正在運作,存在的話,在第七行用tomcat的關閉指令shutdown.sh溫柔地關掉,第八行線程停3秒(因為關閉需要時間),第十行跟第四行一樣,查出正在運作的tomcat程序。第十一到十四行,檢測tomcat程序是否還存在,如果存在,用 kill -9 暴力殺掉程序。

第十七行 echo “Startup…” ,輸出“啟動中”讓你開心下。

第十八行 sh ${bin}/startup.sh ,執行tomcat的啟動腳本啟動tomcat。

第十九到二十一行 if語句 ,如果在一開始輸入指令時有帶 “-v” 參數,就把日志資訊列印出來。

至此,tomcat釋出啟動完畢。

繼續閱讀