更新文件:
## update.info
#update_type(full/partial) file_type file_in_server location_in_client cksum date_time old_version new_version
full_update file /updates/update_28181118_1112.tar.gz xxxx 20181118_1112
partial_update file /app_manager/run.py /export/App/app_manager xxxx 20181118_1112
partial_update dir /app_manager/temp /export/App/app_manager xxxx 20181118_1112
old_version 1.0
new_version 1.1
更新脚本:
# 加载全局环境变量
./lib/glob_env.sh
# 加载应用环境变量
./lib/app_env.sh
# 脚本相关变量定义
SERVERADDRESS="http://x.x.x.x:8018"
APPNAME="tom_manager"
APPHOME="/export/App/logger_app"
STOPAPPCMD="~/appOn.sh stop"
STARTAPPCMD="~/appOn.sh start"
RMTFLAG="${SERVERADDRESS}/app_server/update.info"
LOCFLAG="$APPHOME/update.info"
VERSIONFILE="$APPHOME/version"
UPDFILE="update.sh"
# 检查命令是否安装
cmd_exist wget || yum install -y wget
cmd_exist tar || yum install -y tar
# 下载更新文件
# 检查对比本地文件
# 相同
# 直接退款
# 不相同
# 停止应用
# 下载远端文件到本地
# 解压
# 替换文件
# 更新版本文件,临时文件清理
# 重启应用
#
TMPDIR=`mktemp -d`
TMPUPDFLAG="$TMPDIR/update.info"
NCTMPUPDFLAG="$TMPDIR/update.info.nc"
#检查磁盘空间
#check disk space
disc_space_enough $TMPDIR 50 || (echo_red_error "no enough space left, at least 50M is needed, update script exit." && exit -1)
#下载更新文件,并对比
#download update file and compare
wget -o $TMPUPDFLAG $RMTFLAG
res=`compare_file $TMPUPDFLAG $LOCFLAG`
[ $res -eq 0 ] && echo_red "[INFO]$APPNAME, version is same with remote, no need update." && exit 0
#停止应用
eval $STOPAPPCMD
#解析更新文件,执行更新
#parse_file, and make update
full_update_flag="full_update"
partial_update_flag="partial_update"
get_nc_file $TMPUPDFLAG $NCTMPUPDFLAG
full_tar=`grep ${full_update_flag} $NCTMPUPDFLAG | awk -F" " '{print $3}'`
if [ "x"${full_tar} != "x" ]; then #do_full_update,全部更新
tar_file_name=`basename ${full_tar}`
file_name=${tar_file_name%%.*}
wget -P $TMPDIR "${SERVERADDRESS}${full_tar}"
tar xvf $tar_file_name -C $TMPDIR
for file in `ls $TMPDIR/$file_name`; do
[ $file != ${UPDFILE} ] && cp -r $TMPDIR/$file_name/$file $APPHOME/
done
else #do_partial_update,部分更新
grep ${partial_update_flag} $NCTMPUPDFLAG |while read x file_type file_in_server location_in_client x; do
file_name=`basename $file_in_server`
if [ ${file_type} == "dir" ];then
wget -r -np -P ${TMPDIR} "${SERVERADDRESS}${file_in_server}/"
cp -r ${TMPDIR}/${SERVERHOST}${file_in_server} ${location_in_client}
rm -rf ${TMPDIR}/${SERVERHOST}${file_in_server}
elif [ ${file_type} == "file" ];then
wget -o ${TMPDIR}/${file_name} ${SERVERADDRESS}${file_in_server}
cp ${TMPDIR}/${file_name} ${location_in_client}
rm -rf ${TMPDIR}/${file_name}
else
continue
fi
echo "$file_type, $file_in_server, $file_name, $location_in_client"
done
#done < <(grep ${partial_update_flag} $NCTMPUPDFLAG)
fi
#update version file, and clear temp files and directories
cp $TMPUPDFLAG $LOCFLAG
NEWVERSION=`grep 'new_version' $TMPUPDFLAG | awk -F" " '{print $2}'`
echo "$NEWVERSION">$VERSIONFILE
rm -rf $TMPDIR
echo_red_success "congratulations, upgrade success, after server restart, server will back to work!"
#启动应用
#start app
eval $STARTAPPCMD