#应用升级脚本
#!/bin/bash
DATE=`date +%F | awk -F - '{print $1$2$3}'`
HOME_DIR=/test1
APPLICATION_F=$1 #应用名
CHOOSE_IN=$4
UPGRADE_DIR=/test/nas/upgrade
PKG_DIR=${UPGRADE_DIR}/${DATE}/version
BASE_DIR=${HOME_DIR}/app
BACK_DIR=back_${DATE}
CFGFILE_DIR=${BASE_DIR}/${APPLICATION_F}/conf
CFGFILE_DIR_BAK=${UPGRADE_DIR}/${DATE}/${BACK_DIR}/${APPLICATION_F}/conf
LOG_DIR=${HOME_DIR}/logs
CONFIG_FILE_DIR=${UPGRADE_DIR}/script
SHELLS_DIR=/usr/local/bin
PKG_NAME=$2
LOAD_CFG_FILE=$3 #配置文件
DATE=`date +%F | awk -F - '{print $1$2$3}'`
#判断输入参数个数是否符合要求
if [ $# != 4 ];then
echo -e "The number of input parameters is incorrect"
echo -e "Please enter four parameter values.eg:app name|package name|app.txt|y or n"
exit 1
fi
#所有应用的相同操作
base_operate(){
sh ${SHELLS_DIR} $APPLICATION_F stop
sleep 3
#备份应用并移动旧版本到back目录
cd $UPGRADE_DIR
if [ -d $DATE ];then
cd $DATE
if [ -d $BACK_DIR ];then
cd $BACK_DIR
ls ${UPGRADE_DIR}/${DATE}/${BACK_DIR}/${APPLICATION_F}_${DATE}.tar.gz > /dev/null 2>&1
if [ $? -eq 0 ];then
echo -e "The application has been copied,continue..."
else
cd $BASE_DIR
tar -zcvf ${UPGRADE_DIR}/${DATE}/${BACK_DIR}/${APPLICATION_F}_${DATE}.tar.gz ${APPLICATION_F}
echo -e "----------------mv files-----------------------"
mv $APPLICATION_F ${UPGRADE_DIR}/${DATE}/${BACK_DIR}
echo -e "----------------done-----------------------"
fi
else
echo -e "The backup directory does not exist"
exit 1
fi
else
echo "No release date directory, confirm if the version package is uploaded"
exit 1
fi
#判断新的版本包是否上传
cd ${UPGRADE_DIR}/${DATE}
if [ -d version ];then
cd version
sum_p=`ls -l |wc -l`
if [ $sum_p -le 1 ];then
echo "Version packages not uploaded"
exit 1
fi
else
echo "No release package directory"
exit 1
fi
#校验输入的新版本包名,并复制新版本应用包到app目录
cd ${UPGRADE_DIR}/${DATE}/version
if [ -d $PKG_NAME ];then
cd $BASE_DIR
if [ -d $APPLICATION_F ];then
echo -e "Already new version,continue..."
else
cp -r ${UPGRADE_DIR}/${DATE}/version/${PKG_NAME} ./$APPLICATION_F
fi
else
echo -e "package name input error"
exit 1
fi
}
#应用升级,复制原来的配置文件
app_upgrade(){
echo -e "-----------Copy application dir and cfg files-------------"
cd $CONFIG_FILE_DIR
app_cfg_line=`cat $LOAD_CFG_FILE | tr -d '\r'`
for i in $app_cfg_line
do
cd $CFGFILE_DIR
#cp -r ${CFGFILE_DIR_BAK}/$i ./ > /dev/null 2>&1
cp -r ${CFGFILE_DIR_BAK}/$i ./$i
echo $i
if [ $? -ne 0 ];then
echo -e "The copied file does not exist":$i
exit 1
fi
done
echo -e "---------Copy done---------------"
#校验本次发版是否有配置文件新增或修改
r_value=$(echo $CHOOSE_IN |tr [a-z] [A-Z])
echo $r_value
if [ ${r_value} = Y ];then
echo -e "The application requires add or modify cfg files"
echo -e "The application requires manual start!!!"
exit 1
fi
sh ${SHELLS_DIR} $APPLICATION_F start
sleep 2
tail -F ${LOG_DIR}/app/${APPLICATION_F}-info.log
}
#输入正确的应用名后执行脚本
case $1 in
app-0[1-4])
base_operate
app_upgrade
;;
xxx-0[1-2])
base_operate
app_upgrade
;;
xxx-0[1-9]|xxx-10)
base_operate
app_upgrade
;;
*)
echo -e "The application name is incorrect"
echo -e "Please enter full application name. eg:oss-app-01"
esac
脚本思路:
通过case判断输入的应用名是否正确,之后根据函数功能完成升级,需要考虑到中途失败重新执行脚本的情况
需要考虑到各种异常退出的情况