思路:在一个受ups保护的机器A1上写脚本,几分钟(如半分钟)ping不在ups保护的机器B,如果几次(如5次)ping不同,这时我们认为将要停电,此时脚本执行正常关闭受ups保护的机器上数据库的命令。注意,1-要保证在有电时A1和B的连通性,2-停电来电后,最好先开启B机器,然后开启其他机器。
check_ping.sh
#!/bin/bash#检测主机Server=172.18.88.11#ping不通时临时结果保存位置Ping_Result=/root/ping_result.tmp#检测日志LOG=/root/ping.log#连续检测不通次数CheckNum=5#检查间隔时间CheckInterval=30s#当前已连续检测不通次数Count=0while truedo ping -w 3 $Server > $Ping_Result [ `grep 'time=' $Ping_Result|wc -l` -ge 1 ] Result=$? if [ $Result -eq 0 ] then Count=0 echo >> $LOG echo `date +%Y-%m-%d_%H:%M:%S` 'check OK'>> $LOG echo >> $LOG else ((Count=$Count+1)) echo >> $LOG echo `date +%Y-%m-%d_%H:%M:%S` 'ping error' >> $LOG echo 'ping result:'>> $LOG echo ' consecutive '$Count' times' >> $LOG echo ' 连续第' $Count '次未ping通' >> $LOG echo 'ping detail:' >> $LOG cat $Ping_Result |xargs -i echo ' '{} >> $LOG echo >> $LOG if [ $Count -eq $CheckNum ] then echo 'shutdown oracle ...' >> $LOG su - oracle -c '/home/oracle/stop.sh' >> $LOG echo 'shutdown oracle complete' >> $LOG echo >> $LOG echo >> $LOG Count=0 fi fi sleep $CheckIntervaldone
stop.sh
#!/bin/shlsnrctl stopsqlplus /nolog <