#!/usr/bin/env python
# coding=utf-8
# hexm@2016-02-14 import time
import requests
import paramiko
import subprocess
import requests HOST = (
"10.88.2.182:22",
     "10.88.2.183:22",
    "10.88.2.184:22"
)
class DnsHelper(object):

    def checkStatus(self, dns):
'''
检查状态
'''
status = subprocess.call('/usr/bin/dig www.baidu.com @%s +time=1 &> /dev/null' % dns, shell=True)
return status def modifyStatus(self):
NS = "nameserver %s\nnameserver %s\nnameserver %s" % (DNS[0], DNS[1], DNS[2])
cmd = "echo \"%s\" > /etc/resolv.conf" % NS
self.exec_command(cmd) def exec_command(self, cmd):
'''
远程连接修改 '''
private_key = paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa')
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
for host in HOST:
h,p = host.strip().split(':')
try:
ssh.connect(hostname=h, port=int(p), username='root', pkey=private_key, timeout=1)
stdin, stdout, stderr = ssh.exec_command(cmd)
except:
continue
ssh.close()
self.alarm("切换dns为%s成功" % DNS[0]) def alarm(self, info):
url = "http://alarm.mingxiao.com/alarm/index.php?type=13&gid=199&msg=%s" % info
try:
r = requests.get(url)
except:
pass if __name__ == "__main__":
TAG = 0 # 标志位,0正常,其他不正常
DNS = ["202.106.0.20", "119.29.29.29", "223.5.5.5"] obj = DnsHelper()
while True:
for i in range(2): # 两次次状态是否为0, 0正常,其他不正常
status = obj.checkStatus(DNS[0])
print(status,TAG,DNS)
if status != 0:
TAG += 1
time.sleep(10)
if TAG != 0: # 检测一次不正常,切换dns
TAG = 0
obj.alarm('DNS %s 检测不正常,正在切换' % DNS[0])
DNS.append(DNS[0])
DNS.remove(DNS[0]) # 不正常的DNS放到末尾,
status = obj.checkStatus(DNS[0]) # 检查新DNS是否正常
if status == 0: # 正常则切换dns
obj.modifyStatus()
#TAG = 0
time.sleep(300)

批量监测dns是否可用脚本,不可用时并切换的更多相关文章

  1. linux批量修改文件名的shell脚本

    linux中批量修改文件名的shell脚本代码,主要是使用了rename,结合shell,喜欢的朋友可以参考下 使用 rename 命令  ========================  NAME ...

  2. linux服务器批量部署应用系统shell脚本(Tomcat/jetty)

    linux服务器批量部署应用系统shell脚本: 1.请更换代码内的服务器地址(Tomcat或jetty服务器) serverRoot=/home/undoner/java_tool/apache-t ...

  3. Shell 命令行,实现对若干网站状态批量查询是否正常的脚本

    Shell 命令行,实现对若干网站状态批量查询是否正常的脚本 如果你有比较多的网站,这些网站的运行状态是否正常则是一件需要关心的事情.但是逐一打开检查那简直是一件太糟心的事情了.所以,我想写一个 sh ...

  4. shell脚本监测DNS链接状态给传给zabbix值

    #!/bin/sh time_out=0 querygt3s=0 i=1 while [[ $i -le 15 ]] do i=`expr $i + 1` sleep 2 while read lin ...

  5. App域名劫持之DNS高可用 - 开源版HttpDNS方案详解(转)

      http://mp.weixin.qq.com/s?__biz=MzAwMDU1MTE1OQ==&mid=209805123&idx=1&sn=ced8d67c3e2cc3 ...

  6. 批量后台执行fio性能测试脚本

    安装ansible工具: )直接yum install -y ansible; )然后更改配置,/etc/ansible/ansible.cfg,将里面的host_key_checking = Fal ...

  7. 批量修改DNS记录的TTL值

    最近有个需求,需要修改Windows DNS服务器上区域下所有A记录的TTL值.原先默认的TTL是1小时.也就是说,其它DNS服务器会缓存查询到的记录1个小时.对于近期需要大量修改记录的情况来说这样生 ...

  8. 批量修改git仓库地址脚本

    前言   公司的代码都存放在自己搭建的gitlab上面.之前由于老板升级gitlab.导致下面有个叫做"api"的groups无法访问.通过无所不能的谷歌才知道.在gitlab在某 ...

  9. 批量执行 sql 的 shell 脚本

    最近有用到需要批量导入N个表的sql,一个个导入会吐老血的,写了个shell脚本,便捷导入. 通常我们导入单个sql,可以用 $mysql -uroot -p world < xxxx.sql ...

随机推荐

  1. CF815D Karen and Cards

    CF815D Karen and Cards 固定一维c,然后(a,b)看成坐标,矩形区域求交 1.Segment tree Beats! 2.改成不合法的区域就是求并,c反向枚举,区域只增不减且完全 ...

  2. 哈夫曼树Huffman

    哈夫曼树处理这样的一种问题: 给出一棵n个叶子的k叉树,每个叶子有一个权值wi,要求最小化∑wi*di di表示,第i个叶子节点到根节点的距离.(一般是边数) 处理方法比较固定. 贪心的思路:我们让权 ...

  3. 装饰页面decorators.xml

    WEB-INF/decorators.xml 这个配置可以增加页面的 装饰页面

  4. 使用Nessus漏扫

    Nessus号称是世界上最流行的漏洞扫描程序,全世界有超过75000个组织在使用它.该工具提供完整的电脑漏洞扫描服务,并随时更新其漏洞数据库.Nessus不同于传统的漏洞扫描软件,Nessus可同时在 ...

  5. POJ1185 状压dp(二进制//三进制)解法

    很显然这是一道状压dp的题目 由于每个最优子结构和前两行有关,一个显而易见的想法是用三维dp[i][j][k]用来记录在第i行下为j状态,i - 1行为k状态时的最大值,然而dp[100][1 < ...

  6. django分页功能

    采用django自带的Paginator功能 from django.core.paginator import Paginator food = foodInfo.objects.filter(fo ...

  7. JavaSE学习总结(十五)—— Java反射与注解

    一.静态语言与动态语言 静态类型语言:是指在编译时变量的数据类型即可确定的语言,多数静态类型语言要求在使用变量之前必须声明数据类型,某些具有类型推导能力的现代语言可能能够部分减轻这个要求.强类型 动态 ...

  8. Cannot send, channel has already failed: tcp://127.0.0.1:8161

    解决方案一 我觉得你可能需要把服务完全停掉了 然后重启一下. http://localhost:8161(管理端口) tcp://127.0.0.1:61616(服务端口)

  9. SGU 271 Book Pile

    There is a pile of N books on the table. Two types of operations are performed over this pile: - a b ...

  10. numpy笔记—ravel和c_命令(区别flatten)

    np.c_给numpy数组添加列 np.r_给numpy数组添加行 ravel(): 将多维数组降成一维, 返回的是视图