应用升级脚本

#应用升级脚本
#!/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判断输入的应用名是否正确,之后根据函数功能完成升级,需要考虑到中途失败重新执行脚本的情况
需要考虑到各种异常退出的情况

 

posted @ 2023-10-31 17:44  菜菜陈  阅读(48)  评论(0)    收藏  举报