最近做银行项目,生产环境我们接触不到,升级部署完全由行方人员按我们的操作文档执行。但是我们不确保他们操作的准确性,所以我们所有的升级一律使用脚本,尽可能减少人为的操作,尽量做到一键升级部署。
下文是我们升级脚本的简化记录,以便以后使用参考。
config.init
mysqlIp=127.0.0.1
mysqlPort=3306
mysqlUser=****
mysqlPass=****
mysqlDataBase=test
# 需要执行的sql 脚本
mysqlUpdateSqlPath=/home/update/update_20191217/mysql_update.sql
# 升级包路径
zipFilePath=/home/update/20200318/
#升级包名
zipFile=backend.zip
#服务名称
serviceName=realtime
#项目部署路径
applicationFilePath=/root/zxzs/
#需要添加或修改的项目变量
applicationConf1=http://0.0.0.0:38000/task/process/
applicationConf2=http://0.0.0.0:18000/entity_recognition/
#!/bin/bash
source /etc/profile
source ~/.bash_profile
if [[ $# -eq 1 ]];
then
DONEDATE=$1
else
DONEDATE=$(date --date='1 days ago' +%Y%m%d)i
fi
#读取配置
source ./config.init
if [[ $? = 1 ]];
then
echo -e "\n read config failure;please check ./config.ini"
exit
fi
cd ${applicationFilePath}
#停止后台服务
echo -e "\n==== I will stop ${serviceName} server :===="
ps -ef |grep "${serviceName}"
rtn=`ps -ef |grep "${serviceName}" | wc -l `
if [[ $rtn = 1 ]];
then
echo -e "\n ${serviceName} server is not start"
else
ps -ef |grep "${serviceName}" | grep -v grep | awk '{print $2}' | xargs kill -9
fi
rtn=`ps -ef |grep "${serviceName}" | wc -l `
if [[ $rtn = 1 ]];
then
echo -e "\n stop ${serviceName} server success."
fi
#开始备份jar及系统文件
echo -e "\n start back application file"
backFilePath=${DONEDATE}'bak'
mkdir ${backFilePath}
cp realtime*.jar ./${backFilePath}/
cp ./lib/smartv-*.jar ./${backFilePath}/
rm realtime*.jar
rm ./lib/smartv-complier*.jar
echo -e "\n bak application jar file success"
cp conf/qualityInspection.properties ./${backFilePath}/
echo -e "\n bak application jar file success"
#更新配置文件
echo -e "\n start update application"
echo "nlp.task.pathurl=${applicationConf1}">>conf/qualityInspection.properties
echo "nlp.rule.url=${applicationConf2}">>conf/qualityInspection.properties
echo "quality.emotion.type=1">>conf/qualityInspection.properties
echo -e "\n update application conf success"
echo -e "\n==== will copy unzip file===="
cd $zipFilePath
unzip $zipFile
echo -e "\n==== will update ${serviceName}===="
cd ${applicationFilePath}
cp $zipFilePath/realtime*.jar ./
cp $zipFilePath/smartv-complier*.jar ./lib/
rm -rf $zipFilePath/realtime*.jar
rm -rf $zipFilePath/smartv-complier*.jar
build_dir="logs"
if [ ! -d "$build_dir" ]; then
mkdir $build_dir
fi
#启动服务
echo -e "\n start application service ......"
nohup java -jar realtime*.jar conf voiceAsynETL y > ./logs/voiceAsynETL.log &
if [[ $? == 0 ]];
then
echo -e "\n voiceAsynETL 服务 start success"
sleep 3
else
echo -e "\n voiceAsynETL 服务 start failure."
exit 1
fi
nohup java -jar realtime*.jar conf voiceqi y > ./logs/voiceqi.log &
if [[ $? == 0 ]];
then
echo -e "\n voiceqistart success"
sleep 3
else
echo -e "\n voiceqi start failure."
exit 1
fi
#nohup java -jar realtime*.jar conf aVoiceTrans y > ./logs/aVoiceTrans.log &
nohup java -jar realtime*.jar conf voiceTextExtract y > ./logs/voiceTextExtract.log &
if [[ $? == 0 ]];
then
echo -e "\n voiceTextExtract start success"
sleep 3
else
echo -e "\n voiceTextExtract start failure."
exit 1
fi
nohup java -jar realtime*.jar conf voiceExtract y > ./logs/voiceExtract.log &
if [[ $? == 0 ]];
then
echo -e "\n voiceExtract start success"
sleep 3
else
echo -e "\n voiceExtract start failure."
exit 1
fi
sleep 5
exit
#!/bin/bash
source /etc/profile
source ~/.bash_profile
if [[ $# -eq 1 ]];
then
DONEDATE=$1
else
DONEDATE=$(date --date='1 days ago' +%Y%m%d)i
fi
#读取配置
source ./config.ini
if [[ $? = 1 ]];
then
echo -e "\n read config failure;please check ./config.ini"
exit
fi
echo -e "\n==== will return file===="
cd ${applicationFilePath}
backFilePath=${DONEDATE}'bak'
if [ ! -d "$backFilePath" ];
then
echo -e "\n==== file is return success===="
else
rm -rf ./${backFilePath}/realtime*.jar
rm -rf ./${backFilePath}/smartv-complier*.jar
cp ./${backFilePath}/realtime*.jar ./
cp ./${backFilePath}/*.properties ./conf/
cp ./${backFilePath}/smartv-complier*.jar ./lib/
echo -e "\n==== file is return success===="
rm -rf ./${backFilePath}
fi
rm -rf $zipFilePath/*.jar
rtn=`ps -ef |grep "${serviceName}" | wc -l `
if [[ $rtn = 1 ]];
then
echo -e "\n start run old service====="
nohup java -jar realtime*.jar conf voiceAsynETL y > ./logs/voiceAsynETL.log &
nohup java -jar realtime*.jar conf voiceqi y > ./logs/voiceqi.log &
#nohup java -jar realtime*.jar conf aVoiceTrans y > ./logs/aVoiceTrans.log &
nohup java -jar realtime*.jar conf voiceTextExtract y > ./logs/voiceTextExtract.log &
nohup java -jar realtime*.jar conf voiceExtract y > ./logs/voiceExtract.log &
exit
else
echo -e "\n service is running ====="
fi
#!/bin/bash
source /etc/profile
source ~/.bash_profile
if [[ $# -eq 1 ]];
then
DONEDATE=$1
else
DONEDATE=$(date --date='1 days ago' +%Y%m%d)i
fi
#读取配置
source ./config.ini
if [[ $? = 1 ]];
then
echo -e "\n read config failure;please check ./config.ini"
exit
fi
echo -e "\n==== will stop service===="
ps -ef |grep "${tomcatPath}"
rtn=`ps -ef |grep "${tomcatPath}" | wc -l `
if [[ $rtn = 2 ]];
then
ps -ef |grep "${tomcatPath}" | grep -v grep | awk '{print $2}' | xargs kill -9
if [[ $? == 0 ]];
then
echo -e "\n stop ${tomcatPath} server success"
sleep 3
else
echo -e "\n stop ${tomcatPath} server failure. Please run: ps -ef |grep \"${tomcatPath}\" | grep -v grep | awk '{print $2}' | xargs kill -9"
exit
fi
fi
rtn=`ps -ef |grep "${tomcatPath}" | wc -l `
if [[ $rtn = 1 ]];
then
echo -e "\n"
else
echo -e "\n stop ${tomcatPath} server failure. Please run: ps -ef |grep \"${tomcatPath}\" | grep -v grep | awk '{print $2}' | xargs kill -9"
exit
fi
cd $zipFilePath
unzip ${zipFile}
cd $applicationFilePath
backFilePath=${DONEDATE}'bak/'
mkdir $backFilePath
cp -rf ./ROOT $backFilePath/
echo -e "\n==== bak file success===="
rm -rf ./ROOT/js
rm -rf ./ROOT/pages
rm -rf ./ROOT/lib/realtime*.jar
rm -rf ./ROOT/classes
cp -rf $zipFilePath/js ./ROOT/
cp -rf $zipFilePath/pages ./ROOT/
cp -rf $zipFilePath/lib ./ROOT/WEB-INF/
cp -rf $zipFilePath/classes ./ROOT/WEB-INF/
echo -e "\n==== update application file success===="
$tomcatPath/bin/startup.sh
echo -e "\n==== tail -100f ${tomcatPath}/logs/catalina.out===="
sleep 15
tail -100 ${tomcatPath}/logs/catalina.out
sleep 5
exit 0
#!/bin/bash
source /etc/profile
source ~/.bash_profile
if [[ $# -eq 1 ]];
then
DONEDATE=$1
else
DONEDATE=$(date --date='1 days ago' +%Y%m%d)i
fi
#读取配置
source ./config.ini
if [[ $? = 1 ]];
then
echo -e "\n read config failure;please check ./config.ini"
exit
fi
echo -e "\n==== will stop service===="
ps -ef |grep "${tomcatPath}"
rtn=`ps -ef |grep "${tomcatPath}" | wc -l `
if [[ $rtn = 2 ]];
then
ps -ef |grep "${tomcatPath}" | grep -v grep | awk '{print $2}' | xargs kill -9
if [[ $? == 0 ]];
then
echo -e "\n stop ${tomcatPath} server success"
sleep 3
else
echo -e "\n stop ${tomcatPath} server failure. Please run: ps -ef |grep \"${tomcatPath}\" | grep -v grep | awk '{print $2}' | xargs kill -9"
exit
fi
fi
rtn=`ps -ef |grep "${tomcatPath}" | wc -l `
if [[ $rtn = 1 ]];
then
echo -e "\n"
else
echo -e "\n stop ${tomcatPath} server failure. Please run: ps -ef |grep \"${tomcatPath}\" | grep -v grep | awk '{print $2}' | xargs kill -9"
exit
fi
cd $applicationFilePath
backFilePath=${DONEDATE}'bak/'
if [ ! -d "$backFilePath" ]; then
rm -rf ROOT
cp -rf $backFilePath/ROOT ./
sleep 10
fi
rm -rf $backFilePath
echo -e "\n==== bakfile return success===="
rm -rf $zipFilePath/js
rm -rf $zipFilePath/pages
rm -rf $zipFilePath/lib
rm -rf $zipFilePath/classes
$tomcatPath/bin/startup.sh
echo -e "\n==== tail -100f ${tomcatPath}/logs/catalina.out===="
sleep 15
tail -100 ${tomcatPath}/logs/catalina.out
sleep 5
exit 0