批量监测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 ...
随机推荐
- 网络编程——socket(四十三)
http://www.cnblogs.com/linhaifeng/articles/6129246.html#_label7 http://www.cnblogs.com/linhaifeng/ar ...
- PHP去调用jenkins
背景说明:目前公司用到 jenkins(持续集成开源工具)更多情况下,通过配置,可以在gitlab上通过webhooks去调度jenkins 或者通过 jenkins管理后台,去手动执行“立即构建”去 ...
- vs widows服务的发布
1.在service1.cs里空白处点击右键,弹出菜单选择 添加安装程序 2.自动生成ProjectInstaller.cs文件后 可在InitializeComponent()方法里自定义服务名称 ...
- C#.Net 持久化对象为XML文件
</pre><pre code_snippet_id="613717" snippet_file_name="blog_20150307_1_57950 ...
- php7 安装mssql 扩展
一. Install the Microsoft PHP Drivers for SQL Server [root@w91 source]#curl https://packages.microsof ...
- 无法使用备份文件 'D:\20160512.bak',因为原先格式化该文件时所用扇区大小为 512,而目前所在设备的扇区大小为 4096
删除原先备份的记录 这里再加一条,如果你备份的文件还原有兼容性的问题,那就用低版本的sql做备份,这样的话哪里都能用
- JavaSE学习总结(十五)—— Java反射与注解
一.静态语言与动态语言 静态类型语言:是指在编译时变量的数据类型即可确定的语言,多数静态类型语言要求在使用变量之前必须声明数据类型,某些具有类型推导能力的现代语言可能能够部分减轻这个要求.强类型 动态 ...
- springboot下实现邮件发送功能
springboot给我们封装好了邮件功能,非常简单,只需要稍微配置下就ok. 引入jar <dependency> <groupId>org.springframework. ...
- 在eclipse中启动项目报java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: PermGen space
在我们启动项目的时候经常会出现内存溢出这个错误 设置一下内存就ok 错误信息 java.util.concurrent.ExecutionException: java.lang.OutOfMemo ...
- JAVA记录-SpringMVC集成redis
1.redis.properties #主机地址 redis.host=127.0.0.1 #端口号 redis.port=6379 #当池内没有返回对象时,最大等待时间毫秒数 redis.pool. ...