shell實現tomcat自動備份重啓

運行環境:
    Tomcat:Apache Tomcat Version 7.0.25
    Server:CentOS release 6.2


作爲一名web程序員或測試人員,需要經常發佈程序到線上環境或測試環境中。
每次向線上或者測試環境發佈新war包的時候,我一般都這麼做
1、put xxx.war 到 tomcat_xxx(一臺服務器上有多個tomcat,比如項目名稱是xxx,tomcat一般命名爲tomcat_xxx)
2、ps -ef | grep tomcat_xxx 找到對應的tomcat進程
3、kill tomcat進程
4、rm掉 webapps下的xxx目錄(在tomcat啓動時由xxx.war生成的)
5、mv xxx.war 到指定的備份目錄中
7、mv 新上傳的xxx.war 到 webapps中
8、執行startup.sh,啓動tomcat
9、tail -f catalina.out 查看啓動日誌輸出,確保啓動成功。

現在有了auto_deploy.sh,將auto_deploy.sh放在tomcat的bin目錄下,
只需要以下兩步(以我的環境爲例)
1、put xxx.war 到 /work/tomcat_xxx
2、執行auto_deploy.sh

auto_deploy.sh全部代碼如下:(注意:首次運行需要指定PRO_NAME

#!/bin/sh

#項目名稱,一般是war包的名稱,例如xxx.war,則PRO_NAME="xxx"
PRO_NAME=""

#shell 文件所在目錄
BIN_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

#tomcat 根目錄
TOMCAT_HOME="$(dirname ${BIN_DIR})"

#tomcat 進程名稱,一般是ps -ef |grep xxx 中的xxx
PRG="$(basename ${TOMCAT_HOME})"

DATE=`date +%Y%m%d%H%M%S`

if [ "$PRO_NAME" = "" ]; then
    echo "ERROR:未配置項目名稱,請配置 PRO_NAME 參數值!!!"
    exit 0
fi

#kill tomcat 進程
ps -ef |grep "$PRG" | grep "jdk" | awk '{print "kill -9 " $2}' | sh

#生成一個備份目錄
if [ ! -d "$TOMCAT_HOME/bak" ]; then
    mkdir $TOMCAT_HOME/bak
fi

#部署新war包,同時將舊war包備份並刪除舊的程序文件
if [ -f "$TOMCAT_HOME/$PRO_NAME.war" ]; then
    if [ -f "$TOMCAT_HOME/webapps/$PRO_NAME.war" ]; then
        mv $TOMCAT_HOME/webapps/$PRO_NAME.war $TOMCAT_HOME/bak/${PRO_NAME}_$DATE.war
    fi
    rm -rf $TOMCAT_HOME/webapps/$PRO_NAME
    mv $TOMCAT_HOME/$PRO_NAME.war $TOMCAT_HOME/webapps/
fi

#啓動tomcat
nohup $TOMCAT_HOME/bin/startup.sh > $TOMCAT_HOME/logs/catalina.out &

#打印啓動日誌
tail -f $TOMCAT_HOME/logs/catalina.out

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章