Chinaunix首页 | 论坛 | 博客
  • 博客访问: 104667857
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-18 23:25:00

作者:styr  出处:Unix爱好者家园unix-cd.com   
经历了几次电子汇兑升级,感觉按常规操作确实繁索,基本要经历下载升级包->逐一通知网点暂停操作->关闭安全平台->关闭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"
阅读(592) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~