📄 update-tru64.ksh
字号:
#/bin/ksh# AGENT 产品 TRU64 实例升级程序if [[ ${#1} = 0 ]] then echo "用法: update.ksh 安装路径 " echo "如 update.ksh /home/oms" exitfiinstallPath=$1# 取用户的 uiduid=`id | read -r idStr; expr "$idStr" : 'uid=\([[:digit:]]*\)('`if [[ ${uid} != 0 ]] then echo "必须以root用户升级oms 版本" exitfi# 取当前实例的的版本号curVersion=`grep -e "VERSION=" $installPath/tru64/.setenv | read -r verStr; expr "$verStr" : '.*="\(.*\)"$'cd /tmptar xvf install/oms-tru64-instatll.tar tru64/.setenv newVersion=`grep -e "VERSION=" /tmp/.setenv | read -r verStr; expr "$verStr" : '.*="\(.*\)"$'# 新旧版本号都不能为空if [[ ${#curVersion} = 0 ]] then echo "当前的版本号为空,不能升级" exitfiif ${#newVersion} = 0 ]] then echo "新版本的版本号为空,不能升级" exitfi # 比较实例类型是否一致,tru64 只能更新 tru64的老的版本echo $curVersion | awk ' { print $1; }' | read -r curInstTypeecho $newVersion | awk ' { print $1; }' | read -r newInstTypeif [[ $curInstType != $newInstType ]] then echo "新旧版本实例类型不一致,分别是 $curInstType 与 $newInstType ,不能更新" exitfi # 比较版本号,只能够新版本更新老版本,不能够向后更新echo $curVersion | awk ' { print substr($2,2,length($2) ); }' | read -r curSubVerisonecho $newVersion | awk ' { print substr($2,2,length($2) ); }' | read -r newSubVersionecho $curSubVerison | awk ' BEGIN { FS="." } { printf "%03d%05d%%05d%06d\n", $1,$2,$3,$4; }' | read -r curSubVerStrecho $newSubVerison | awk ' BEGIN { FS="." } { printf "%03d%05d%%05d%06d\n", $1,$2,$3,$4; }' | read -r newSubVerStr# 做版本号比较,当前版本不能新于升级包中的版本if [[ $newSubVerStr <= $newSubVerStr ]] then echo "当前版本号 $curVersion 比升级包中的版本 $newVersion 新或属于同一版本,不能进行更新操作" exitficd $installPath# /tmp/keepFile.txt 保留的文件列表,这些文件在升级时不覆盖cat <<! >/tmp/keepFile.txttru64/config/WK_CORE_1026.cfgtru64/config/WK_CPU_1001.cfgtru64/config/WK_DISK_1003.cfgtru64/config/WK_DISK_1009.cfgtru64/config/WK_LOG_1006.cfgtru64/config/WK_LOG_1013.cfgtru64/config/WK_LOG_1016.cfgtru64/config/WK_LOG_1017.cfgtru64/config/WK_LV_1006.cfgtru64/config/WK_NET_1010.cfgtru64/config/WK_NET_1032.cfgtru64/config/WK_PID_1007.cfgtru64/config/WK_PID_1008.cfgtru64/config/WK_PID_1012.cfgtru64/config/ftp.cfgtru64/config/ftpcycle.cfgtru64/config/logcycle.cfgtru64/config/message.cfgtru64/config/process.cfgtru64/config/task.cfgtru64/config/urgent.cfg!# /tmp/keepCfgArgv.txt 保留的文件中的配置参数当前值列表。这些参数在升级后要保留原来的值cat <<! >/tmp/keepCfgArgv.txttru64/src/WK_LOG_1013/fun.cfg LABtru64/src/WK_LOG_1016/fun.cfg LABtru64/.setenv CRONUSERtru64/.setenv TMPPATHtru64/.setenv OMS_SERVER_IDtru64/.setenv OMS_INSTANCE_IDtru64/config/ftp.cfg OMSIP tru64/config/ftp.cfg OMSUSER tru64/config/ftp.cfg OMSPSWD tru64/config/ftp.cfg OMSPATH!# 切换到安装路径,此处是 安装的产品路径,不是实例的路径cd $installPath# 停止实例的运行,升级完成后需手工启动echo "停止实例的运行,升级完成后请手工启动"#ENABLEFLAG 实例生效标识 0 -- 生效 1 -- 失效 2 -- snooze(睡眠)ex $installPath/tru64/.setenv <<!/ENABLEFLAG=/ s /^.*$/ENABLEFLAG=1/gx!# 等待当前的运行中任务运行完成sleep 60# 备份原来的实例内容dateStr=`date +'%Y%m%d%H%M%s'`mkdir -p $installPath/back/tru64 2>/dev/nullecho "备份原来的实例内容"cp -R $installPath/tru64 $installPath/.back/tru64${dateStr}# 覆盖原来的程序路径echo "覆盖原来的程序路径"tar xvf install/oms-tru64-instatll.tar tru64/.setenv tru64/dict tru64/etc tru64/fmt tru64/src tru64/data/config # 修改各个任务对应程序的执行权限echo "修改各个任务对应程序的执行权限"chmod u+x $installPath/tru64/etc/*find $installPath/tru64/src -name "*.ksh" -exec chmod u+x {} \;# 恢复不能覆盖的文件echo "恢复不能覆盖的文件"while read -r fileName restdo cp $installPath/.back/tru64${dateStr}/${fileName} $installPath/${fileName} done < /tmp/keepFile.txt# 恢复保留的配置文件中的参数,此处考虑保留参数中的特殊字符,如 / [ 等echo "恢复保留的配置文件中的参数"while read -r fileName argv restdo argvStr= grep -e "${argv}=" $installPath/.back/tru64${dateStr}/${fileName} 2>/dev/null | read -r argvStr if [[ ${#argvStr} = 0 ]] then echo "${argv} 在 $installPath/.back/tru64${dateStr}/${fileName} 不存在,无法恢复" fi ex $installPath/${fileName} <<!/${argv}=/ s/^.*$/${argvStr}/gx! echo "$installPath/${fileName} 中的参数 ${argv} 已经恢复为 $argvStr"done < /tmp/keepCfgArgv.txt# 取当前升级版的版本号,如 oms.tru64 v1.2.0.100verison=`grep -e "VERSION=" $installPath/tru64/.setenv | read -r verStr; expr "$verStr" : '.*="\(.*\)"$'echo " $version 升级安装完成
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -