批量监测dns是否可用脚本,不可用时并切换
#!/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是否可用脚本,不可用时并切换的更多相关文章
- linux批量修改文件名的shell脚本
linux中批量修改文件名的shell脚本代码,主要是使用了rename,结合shell,喜欢的朋友可以参考下 使用 rename 命令 ======================== NAME ...
- linux服务器批量部署应用系统shell脚本(Tomcat/jetty)
linux服务器批量部署应用系统shell脚本: 1.请更换代码内的服务器地址(Tomcat或jetty服务器) serverRoot=/home/undoner/java_tool/apache-t ...
- Shell 命令行,实现对若干网站状态批量查询是否正常的脚本
Shell 命令行,实现对若干网站状态批量查询是否正常的脚本 如果你有比较多的网站,这些网站的运行状态是否正常则是一件需要关心的事情.但是逐一打开检查那简直是一件太糟心的事情了.所以,我想写一个 sh ...
- 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 ...
- App域名劫持之DNS高可用 - 开源版HttpDNS方案详解(转)
http://mp.weixin.qq.com/s?__biz=MzAwMDU1MTE1OQ==&mid=209805123&idx=1&sn=ced8d67c3e2cc3 ...
- 批量后台执行fio性能测试脚本
安装ansible工具: )直接yum install -y ansible; )然后更改配置,/etc/ansible/ansible.cfg,将里面的host_key_checking = Fal ...
- 批量修改DNS记录的TTL值
最近有个需求,需要修改Windows DNS服务器上区域下所有A记录的TTL值.原先默认的TTL是1小时.也就是说,其它DNS服务器会缓存查询到的记录1个小时.对于近期需要大量修改记录的情况来说这样生 ...
- 批量修改git仓库地址脚本
前言 公司的代码都存放在自己搭建的gitlab上面.之前由于老板升级gitlab.导致下面有个叫做"api"的groups无法访问.通过无所不能的谷歌才知道.在gitlab在某 ...
- 批量执行 sql 的 shell 脚本
最近有用到需要批量导入N个表的sql,一个个导入会吐老血的,写了个shell脚本,便捷导入. 通常我们导入单个sql,可以用 $mysql -uroot -p world < xxxx.sql ...
随机推荐
- (HDU 1542) Atlantis 矩形面积并——扫描线
n个矩形,可以重叠,求面积并. n<=100: 暴力模拟扫描线.模拟赛大水题.(n^2) 甚至网上一种“分块”:分成n^2块,每一块看是否属于一个矩形. 甚至这个题就可以这么做. n<=1 ...
- k8s 常用命令汇集
通过yaml文件创建: kubectl create -f xxx.yaml (不建议使用,无法更新,必须先delete) kubectl apply -f xxx.yaml (创建+更新,可以重复使 ...
- 启动tomcat时报错:java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException:A child container failed during start
解决方法:https://www.cnblogs.com/xiangxinhouse/p/6377842.html
- Java_myBatis_XML代理_延迟加载
使用mybatis的延迟加载,需要两个步骤: 1.在全局配置文件中添加一下语句(lazyLoadingEnabled默认为false,aggressiveLazyLoading默认为true) < ...
- 什么是cap
cap理论是分布式系统中非常重要的一个理念 什么是cap理论: Consistency一致性 Availability可用性 Partition-tolerance分区容忍性 CP: 高一致性C和分区 ...
- vue中extend/component/mixins/extends的区别
vue中extend/component/mixins/extends的区别 教你写一个vue toast弹窗组件 Vue.extend构造器的延伸
- Linux记录-shell一行代码杀死进程(收藏)
ps -ef |grep hello |awk '{print $2}'|xargs kill -9
- Hbase记录-Hbase shell使用命令
1.进入hbase shell 执行./bin/hbase shell 2.进入后,help 帮助信息,如可以使用help 'create' 3.创建表:create 'test','cf' 表 ...
- VC++中LogFont设置字体(转)
LOGFONT是Windows内部字体的逻辑结构,主要用于设置字体格式,其定义如下:typedef struct tagLOGFONTA{LONG lfHeight;LONG lfWidth;LONG ...
- js scroll函数
$(function () { $(".sticky").hide(); var top = $(window).scrollTop(); if (top >= 100) { ...