我们更新服务器的tomcat一般有一下步骤:1、停止tomcat。2、备份配置文件。3、上传war包。4、配置文件还原。5、重启tomcat。这些步骤虽然简单但是,如果重复很多次还是会感觉浪费时间。根据DRY(Don't Repeat Yourself)原则,所以决定写脚本一次完成。
具体脚本如下:
echo ++++++++++Created by xuzhongxing 2016-03-24++++++++++++++++
echo -------自动更新开始---------
#变量定义
#包相关定义
WAR_FILE_PATH=/home/lvyx/UpdateWar/dev-qdbaWar
WAR_FILE_NAME=client_web.war
UNZIP_PATH=/home/lvyx/apache-tomcat-dev-qdba/webapps/ROOT
#查找进程的关键字
PID_MSG=apache-tomcat-dev-qdba
#需要备份的文件夹和文件
APP_FILE_PATH1=/home/lvyx/apache-tomcat-dev-qdba/webapps/ROOT
APP_FILE_NAME1=jdbc.properties
APP_FILE_NAME2=redis.properties
#存放备份文件的文件夹
OLD_FILE_PATH=/home/lvyx/UpdateWar/dev-qdbaWar/Root
#存放配置文件的路径
CONFIG_FILE_PATH=WEB-INF/classes/business/resources/conf
#启动脚本定义
APP_START_PATH=/home/lvyx/apache-tomcat-dev-qdba/bin
APP_START_FILE=startup.sh
#开始之前先检查war是否存在
if [ ! -f "$WAR_FILE_PATH/$WAR_FILE_NAME" ]; thens
echo ----------war不存在--------结束------------
exit
fi
echo ----1---停止tomcat开始-------
pid=`ps -ef|grep $PID_MSG|grep -v grep|awk '{print $2}'`
if [ -n "$pid" ]
then
echo 'The pid: ' $pid ' 正在结束....'
kill -9 $pid
fi
echo --1-----停止tomcat结束-------
echo ---2----备份配置文件开始-------
#备份之前先把上次的删掉
rm -rf $OLD_FILE_PATH/*
if [ ! -d "$OLD_FILE_PATH" ]; then
mkdir -p $OLD_FILE_PATH
fi
cp -fr $APP_FILE_PATH1/* $OLD_FILE_PATH
echo ----2---备份配置文件结束-------
#解压war包覆盖所有的文件
echo ---3----war包解压开始-------
unzip -o -q -d $UNZIP_PATH $WAR_FILE_PATH/$WAR_FILE_NAME
echo ----3---war包解压结束-------
#还原备份的配置文件
echo ----4---配置文件还原开始-------
cp -fr $OLD_FILE_PATH/$CONFIG_FILE_PATH/$APP_FILE_NAME1 $APP_FILE_PATH1/$CONFIG_FILE_PATH
cp -fr $OLD_FILE_PATH/$CONFIG_FILE_PATH/$APP_FILE_NAME2 $APP_FILE_PATH1/$CONFIG_FILE_PATH
echo ---4----配置文件还原结束-------
#启动tomcat
echo -----5--tomcat启动开始-------
sh $APP_START_PATH/$APP_START_FILE
echo -----5--tomcat启动结束-------
echo -------自动更新结束---------
如果你遇到这个问题可以这样解决。我是遇到了。来源于网上。
在Linux下运行shell脚本,报错
stop.sh: line 12: syntax error: unexpected end of file
使用vim打开脚本,执行命令:
set fileformat=unix
保存退出就可以了。问题解决。
原因是Linux下的文件结束符和Windows下的文件结束符不一样。在Windows上编辑的脚本,放在Linux额上运行就会有这种问题。
可以自行扩展 回滚的脚本。在这里就不重复了。