Tomcat:Apache Tomcat Version 7.0.25
Server:CentOS release 6.2
每次向線上或者測試環境發佈新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