经历了几次电子汇兑升级,感觉按常规操作确实繁索,基本要经历下载升级包->逐一通知网点暂停操作->关闭安全平台->关闭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"
|
|
|