#!/bin/bash
#获取当前解析的ip
nowip=`grep api.douban.com /etc/hosts |awk -F ' ' '{print $1}'`
#获取当前服务器ip
local_ip=$(ifconfig eth6 |grep 'inet addr' | awk -F '[ :]+' '{print $4}')
#echo ${nowip}
#开始测试当前ip
ping -c 3 ${nowip} > /dev/null
#当访问不可达时,开始更换ip
if [ $? == 1 ]
then
#获取dns解析的ip总数
api_ip_count=$(nslookup api.douban.com 8.8.8.8 |grep -v 8.8.8.8 |grep Address | awk -F ' ' '{print $2}' | wc -l)
#将所有ip存入变量
api_list=$(nslookup api.douban.com 8.8.8.8 |grep -v 8.8.8.8 |grep Address | awk -F ' ' '{print $2}')
#设置检测ip失败计数
failed_count=0
#循环从解析的ip列表中读取ip
for val in $(echo ${api_list})
do
#检测列表中的ip是否可达
ping -c 3 ${val} > /dev/null
#当可达时
if [ $? == 0 ]
then
#将ip存入变量
setip=$val
#echo ${setip}
#更新host中的ip解析
sed -i "s/${nowip} api.douban.com/${setip} api.douban.com/g" /etc/hosts
#发送邮件通知ip更新成功
echo "原解析的ip:${nowip}<br>现解析的ip:${setip}<br>$(date '+%Y-%m-%d %H:%M')" | mutt -s "访问豆瓣api地址更换" -e 'set content_type="text/html"' [email protected]
#跳出循环
break
else
#当ip检测不可达时,检测失败计数+1
let failed_count+=1
#echo $failed_count
#当计数器大于等于解析获取的ip总数时
if [ $failed_count >= $api_ip_count ]
then
#发送邮件告警所有ip均不可用
echo "所有能解析的ip均无法访问!<br>已解析的ip列表:${api_list}<br>当前主机:${local_ip}<br>$(date '+%Y-%m-%d %H:%M')" | mutt -s "访问豆瓣api故障" -e 'set content_type="text/html"' [email protected]
fi
fi
done
fi
© 著作权归作者所有
文章评论(0)