案例4 小脚本惹出了大麻烦

某银行灾备环境. 运维人员经常需要远程校验灾备端数据的可用性。为了方便日常的常规操作写了专门的启动停止脚本.执行完脚本就登录不上测试主机了.能ping通。运维人员反映,偶尔也会发生这样的问题,一般做法就是要求系统管理员帮他们重新启动分区,听完了,感觉问题好诡异啊。 ...显示全部

某银行灾备环境. 运维人员经常需要远程校验灾备端数据的可用性。为了方便日常的常规操作写了专门的启动停止脚本.执行完脚本就登录不上测试主机了.能ping通。运维人员反映,偶尔也会发生这样的问题,一般做法就是要求系统管理员帮他们重新启动分区,听完了,感觉问题好诡异啊。 我们通过HMC登录到分区,AIX运行正常。后来经常一番仔细排查询问找到了"病根".

欢迎大家交流,周四公布原因

[code class=""]#!/bin/sh
su - oracle -c \"/home/oracle/stopdb.sh\"
echo \"Please waitting for 30 seconds...\"
sleep 10
su - oracle -c \"/home/oracle/stopasm.sh\"
/etc/init.cssd stop
/home/oracle/removedev.sh
-----------------------------------------

#!/bin/sh
. /home/oracle/.profile
echo `id`
echo `env|grep ORA`
export ORACLE_SID=scdb
sqlplus '/as sysdba' <shutdown immediate
exit
EOF
lsnrctl stop
------------------------------------------

#!/bin/sh
#umount filesystem
fuser -kux /oracle
umount /oracle

#varyoffvg
varyoffvg oralevg

#exportvg
exportvg oralevg

#rmdev
rmdev -dl hdisk10
rmdev -dl hdisk11
rmdev -dl hdisk12
rmdev -dl hdisk13
rmdev -dl hdisk14
rmdev -dl hdisk15
rmdev -dl hdisk16
rmdev -dl hdisk17
[/code]收起
参与46

查看其它 10 个回答myciciy的回答

myciciymyciciyIT顾问某金融科技公司

确实是脚本里的这行出问题,不是说这行命令有问题,是每次出现这个问题的时候,运维人员说过,有时候执行脚本停止里面有一些报错,为了保证执行成功,他们又执行了一遍。问题就出在这里,本来第一遍执行的时候/oracle已经被成功umount了,第二次执行的时候就不是/oracle文件系统了,而是一个目录,这个时候fuser会把很多root相关的进行直接kill掉,导致我们无法再登录了。

[code class=\"\"]fuser -kux /oracle[/code]

这个场景很好模拟,找台测试机,执行2遍,效果自然就显现了。

如何解决呢,通过hmc登录到终端重启ssh进程,startsrc -s ssh.虽说这样能够重新登录,但是里面可能有其他的进程没有被重新启动,最安全的办法还是重启一下分区。

银行 · 2016-12-01
浏览2935
  • 在做执行fuser前判断下命令是否存在,不存在就不执行。 写脚本时有时也是需要加写判断的,不然就是命令集合,称不上脚本。
    2016-12-01

回答者

myciciy
myciciy21035
IT顾问某金融科技公司
擅长领域: 服务器存储灾备

myciciy 最近回答过的问题

回答状态

  • 发布时间:2016-12-01
  • 关注会员:11 人
  • 回答浏览:2935
  • X社区推广