经历了几次电子汇兑升级,感觉按常规操作确实繁索,基本要经历下载升级包->逐一通知网点暂停操作->关闭安全平台->关闭mysql数据库->解开升级包->重启mysql数据库->重启安全平台->逐一通知网点重新登录的过程.为简化一些操作,粗制了这个半自动的升级脚本,由root用户下载到升级包后(默认升级包是下载到/tmp目录下),执行此脚本,按提示操作,基本上能完成升级操作.兄弟们请帮着斧正斧正,多给建议意见改进,谢谢 如果脚本执行完成,升级成功,那么在/tmp下会生成sj(日期).log日志文件;如不成功,可参考运行过程中的提示或/tmp下的ssp(日期).log(关闭.重启)和msyql(日期).log(关闭.重启)日志文件 (PS:之所以只能叫半自动升级脚本,原因大概有3:1是偶在脚本测试中,切换ssp和newepr用户时,必须要键入回车键才能继续,不知道兄弟们的ssp和newepr的.profile是不是也是这样;2是得到升级包的途径可能大家都不相同,所以不能做出统一的自动从省局服务器得到升级包的脚本,但如果兄弟们有这条件或有明确的固定的下载方式,也可自行加入ftp下载模块,这样就不需要运行脚本前必须得先下载升级包;3是有时升级可能需要按升级说明文件的要求,在DSCPT.DAT中加入指定的提示信息,可是这升级说明文件也不统一或格式不固定规范,故而也不可能做出统一固定的在DSCPT.DAT中自动增加行的脚本,当然有需要的兄弟可以自行加入该模块)
祝各位兄弟们新年愉快!
[code] #!/bin/ksh #电子汇兑半自动升级脚本 V060125 #四川省乐山市沙湾区邮政局 宋涛 trap "tput sgr0 " 0 1 2 3 9 15 tput bold tardir=/tmp neweprname=newepr sspname=ssp neweprdir=/usr/$neweprname sspdir=/usr/$sspname
[ "$LOGNAME" = "root" ] || { echo "\n\n 请由 root 用户执行本升级程序\n" exit 1 } [ "$(ls $tardir/*.tar *.Z 2>/dev/null)" ] || { echo "\n\n $sjdir 目录下未找到升级包文件,请检查后再试\n" exit 1 }
sspstop=$tardir/${sspname}stop$(date +%y%m%d).log mysqlstop=$tardir/mysqlstop$(date +%y%m%d).log sspstart=$tardir/${sspname}start$(date +%y%m%d).log mysqlstart=$tardir/mysqlstart$(date +%y%m%d).log sjlog=$tardir/sj$(date +%y%m%d).log
cd $tardir while : do clear echo "\n\n 电 子 汇 兑 升 级 脚 本\n\n" while : do sjname=$(ls -t *.tar *.Z | head -1) printf "
****************************************************************** * * * 步骤一: 选择升级包文件...... * * * ******************************************************************
" l -t *.tar *.Z echo -n "\n\n 请输入升级包的名称,退出请输入 n 键,回车默认为 $sjname : " read var [ "$var" = "n" -o "$var" = "N" ] && { echo "\n 升级未完成,已选择退出\n" exit 1 } if [ "$var" ] then sjname=$(ls $var 2>/dev/null) [ $(echo $sjname|wc -w) -eq 1 ] && { [ -f $sjname ] && break || \ { echo "\n\n $sjname 升级包不存在,请重新输入\n" read clear continue } } || \ { echo "\n\n $sjname 升级包输入错误,请重新输入\n" read clear continue } else break fi done
while : do printf "
****************************************************************** * * * 步骤二: 选择升级目录...... * * * ******************************************************************
" printf "\n 1 -- $neweprdir (回车默认) \n 2 -- $neweprdir/stlr \n n -- 退出\n\n" read var?" 请选择升级目录,如升级目录不在上表中,请自行输入目录名称: " [ "$var" ] || { sjdir=$neweprdir break } case $var in 1)sjdir=$neweprdir break ; 2)sjdir=$neweprdir/stlr break ; n|N) echo "\n 升级未完成,已选择退出\n" exit 1 ; *)[ -d $var -a -w $var ] && sjdir=$var || { echo "\n $var 目录不存在或不可写,请重新选择\n" read clear continue }
; break ; esac done while : do printf "
****************************************************************** * * * 步骤三: 确认开始升级...... * * * ******************************************************************
" echo -n "\n\n 升级包: $sjname\n 升级目录: $sjdir\n 1 -- 继续\n 2 -- 返回\n 3 -- 退出\n\n" read var?" 请输入选择: " case $var in 1) break 2 ; 2) break ; 3) echo "\n 升级未完成,已选择退出\n" exit 1 ; *) echo "\n 确认错误,请重新选择" read continue ; esac done done
printf "
****************************************************************** * * * 步骤四: 通知各汇兑网点暂停业务 * * * ******************************************************************
" killtty=$(ps -ef | grep steller | grep -v grep | awk '{print $6}') for ttyname in $killtty do printf "
*************************************************************** * * * 正在系统升级,请稍候再重新登陆进入系统 * * * ***************************************************************
" >/dev/$ttyname done
printf "
****************************************************************** * * * 步骤五: 关闭加密平台,请键入回车键继续...... * * * ******************************************************************
" if [ "$(ps -ef|grep $sspname | grep TOPSECURE|grep -v grep)" ] then su - $sspname -c "cd bin stop_ssp 2>/dev/null" > $sspstop sleep 5 [ "$(ps -ef|grep $sspname|grep TOPSECURE|grep -v grep)" ] \ && { echo "\n\n 加密平台关闭 失败\n\n" exit 1 } || echo "\n\n 加密平台关闭 成功\n\n" else echo "\n\n 加密平台没有 启动\n\n" fi
printf "
****************************************************************** * * * 步骤六: 关闭mysql数据库,请键入回车键继续...... * * * ******************************************************************
" if [ "$(ps -ef|grep safe_mysqld|grep -v grep)" ] then su - ${neweprname} -c "mysql.server stop 2>/dev/null" > $mysqlstop sleep 5 [ "$(ps -ef|grep safe_mysqld|grep -v grep)" ] \ && { echo "\n\n mysql数据库关闭 失败\n\n" exit 1 } || echo "\n\n mysql数据库关闭 成功\n\n" else echo "\n\n mysql数据库没有 启动\n\n" fi rm /tmp/mysql.sock 2>/dev/null
printf "
****************************************************************** * * * 步骤七: 还原解压升级包 * * * ******************************************************************
" cp $sjname $sjdir 2>/dev/null && echo "\n cp 升级包 $sjname 到 $sjdir 成功\n" ||\ { echo "\n cp 升级包 $sjname 到 $sjdir 失败,请检查后再试\n" exit 1 } cd $sjdir chmod 755 $sjname echo "\n\n 正在还原解压缩升级包,请稍候\n" [ "${sjname##*.}" = "Z" ] && { uncompress $sjname 2>/dev/null && echo "\n $sjname 升级包还原 成功\n" ||\ { echo "\n\n $sjname 升级包还原 失败,请检查后再试\n" exit 1 } sjname=${sjname%.Z} } tar xvf $sjname >$sjlog 2>/dev/null && echo "\n $sjname 升级包解压 成功\n" ||\ { echo "\n\n $sjname 升级包解压 失败,请检查后再试\n" exit 1 }
printf "
****************************************************************** * * * 步骤八: 重启mysql数据库,请键入回车键继续...... * * * ******************************************************************
" su - ${neweprname} -c "mysql.server start 2>/dev/null" > $mysqlstart sleep 5 [ "$(ps -ef|grep safe_mysqld|grep -v grep)" ] \ && echo "\n\n mysql数据库重启 成功\n\n" || { echo "\n\n mysql数据库重启 失败\n\n" exit 1 }
printf "
****************************************************************** * * * 步骤九: 重启加密平台,请键入回车键继续...... * * * ******************************************************************
" su - $sspname -c "cd bin start_ssp 2>/dev/null" > $sspstop sleep 5 [ "$(ps -ef|grep $sspname|grep TOPSECURE|grep -v grep)" ] \ && echo "\n\n 加密平台重启 成功\n\n" || { echo "\n\n 加密平台重启 失败\n\n" exit 1 }
printf "
****************************************************************** * * * 步骤十: 通知各汇兑网点升级完成,重新登录 * * * ******************************************************************
" for ttyname in $killtty do printf "
*************************************************************** * * * 系统升级完成,请重新登陆进入系统 * * * ***************************************************************
" >/dev/$ttyname kill -9 $(ps -t $ttyname|awk 'NR!=1 {print $1|"sort -rn"}') done
echo "\n\n\n 升 级 成 功 完 成 \n\n"
| | |