Python实现检测服务器是否可以ping通的2种方法


Posted in Python onJanuary 01, 2015

好想在2014结束前再赶出个10篇博文来,~(>_<)~,不写博客真不是一个好兆头,至少说明对学习的欲望和对知识的研究都不是那么积极了,如果说这1天的时间我能赶出几篇精致的博文,你们信不信,哈哈,反正我是信了。。。

python检测服务器是否ping通的2种方法

1、第一种比较挫,就是用ping,python调用shell,这个适用于较少的服务器数量,几百台已经很慢了(当然是说python同步的方法,要是nodejs异步方式还是很快的,但是nodejs CPU计算不行,所以尝试了下只能200台左右的服务器可以同时ping,再多的话程序也会崩掉)

shell脚本再简单不过了,ping.sh如下:

#!/bin/bash

PING=`ping -c 3 $1 | grep '0 received' | wc -l`

echo $PING

其实很简单,ping 3个包,只要ping通,上述返回的结果就不是0。$1是传入的第一个参数,即IP

思路很简单的,从数据库读出IP 列表,然后调用上述脚本:

#检查ip能否ping通

#0:正常,1:ping不通

def check_ip_ping():

    record = get_ip() #从数据库中读取的IP列表

    for i in range(0,len(record)):

        p = subprocess.Popen([r'./ping.sh',record[i]],stdout=subprocess.PIPE)

       result = p.stdout.read()

        Status = 0

        if result =='1\n':

            Status = 1

            #print i,record[i],'----ping failed----'

        else:

            ping_ok.append(record[i])

            #print i,record[i],'----ping success----'

        mysql('update ip_connect set Status=%d where IP="%s"'%(Status,record[i]))

2、比这种快很多,适合服务器数量较大时使用,fping命令,它是对一个文件的批量ping,瞬间完成的,如果ping不通,那就较慢,日常ping不通的毕竟是少数,所以这个非常适用。来感受一下,它ping的结果,新建一个文件iplist,里面是IP列表,fping结果如下:

Python实现检测服务器是否可以ping通的2种方法

其实结果就两个 is alive / is unrreachable ,其它的中间检测时它自己输出的不用理会。

fping.sh :

#!/bin/bash

rm -f result.txt

cat ipmi_ping.txt | fping > result.txt

思路也很简单,将IP列表读取来写进一个iplist文件,然后再对这个文件fping(调用fping.sh)批量执行的结果写进result文件:
def check_online_ip():

    ip = mysql('select * from ip_check')
    #将IP写进一个文件

    if os.path.exists('iplist.txt'):

        os.remove('iplist.txt')

    iplist= 'iplist.txt'

    for i in range(0,len(ip)):

        with open(iplist, 'a') as f:

            f.write(ip[i][0]+'\n')
    #对文件中的IP进行fping

    p = subprocess.Popen(r'./fping.sh',stdout=subprocess.PIPE)

    p.stdout.read()
    #读result.txt文件,将IP is unreachable的行提取更新mysql状态为1

    result = open('result.txt','r')

    content = result.read().split('\n')

    for i in range(0,len(content)-1):

        tmp = content[i]

        ip = tmp[:tmp.index('is')-1]

        Status = 0

        if 'unreachable' in tmp:

            Status = 1

        #print i,ip

        mysql('update  ip_check set Status=%d where IP="%s"'%(Status,ip))

    print 'check all ipconnectness over!'

将这个搞成计划任务,每天跑几遍,还是挺赞的。 呵呵。。

Python 相关文章推荐
python基础入门学习笔记(Python环境搭建)
Jan 13 Python
linux平台使用Python制作BT种子并获取BT种子信息的方法
Jan 20 Python
对pandas的dataframe绘图并保存的实现方法
Aug 05 Python
Python实现变量数值交换及判断数组是否含有某个元素的方法
Sep 18 Python
Django2.1.3 中间件使用详解
Nov 26 Python
Django框架搭建的简易图书信息网站案例
May 25 Python
浅析python 中大括号中括号小括号的区分
Jul 29 Python
pycharm创建scrapy项目教程及遇到的坑解析
Aug 15 Python
python破解bilibili滑动验证码登录功能
Sep 11 Python
python线程定时器Timer实现原理解析
Nov 30 Python
使用pyecharts1.7进行简单的可视化大全
May 17 Python
使用Python获取爱奇艺电视剧弹幕数据的示例代码
Jan 12 Python
Python Web框架Flask信号机制(signals)介绍
Jan 01 #Python
Python模拟登录12306的方法
Dec 30 #Python
python执行shell获取硬件参数写入mysql的方法
Dec 29 #Python
简单的抓取淘宝图片的Python爬虫
Dec 25 #Python
简单使用Python自动生成文章
Dec 25 #Python
Python 抓取动态网页内容方案详解
Dec 25 #Python
利用Psyco提升Python运行速度
Dec 24 #Python
You might like
php版微信小店调用api示例代码
2016/11/12 PHP
如何在Laravel5.8中正确地应用Repository设计模式
2019/11/26 PHP
JQuery困惑—包装集 DOM节点
2009/10/16 Javascript
js setattribute批量设置css样式
2009/11/26 Javascript
js导入导出excel(实例代码)
2013/11/25 Javascript
采用call方式实现js继承
2014/05/20 Javascript
js获取当前年月日-YYYYmmDD格式的实现代码
2016/06/01 Javascript
Jquery Easyui日历组件Calender使用详解(23)
2016/12/18 Javascript
javascript ES6中箭头函数注意细节小结
2017/02/17 Javascript
微信小程序 仿美团分类菜单 swiper分类菜单
2017/04/12 Javascript
js实现canvas保存图片为png格式并下载到本地的方法
2017/08/31 Javascript
详解JS转换数值函数Number()、parseInt()、parseFloat()
2018/08/24 Javascript
mpvue中使用flyjs全局拦截的实现代码
2018/09/13 Javascript
vue本地打开build后生成的dist文件夹index.html问题
2019/09/04 Javascript
解决elementUI 切换tab后 el_table 固定列下方多了一条线问题
2020/07/19 Javascript
解决vue-pdf查看pdf文件及打印乱码的问题
2020/11/04 Javascript
Python跳出循环语句continue与break的区别
2014/08/25 Python
浅谈Python 中整型对象的存储问题
2016/05/16 Python
Python使用Srapy框架爬虫模拟登陆并抓取知乎内容
2016/07/02 Python
Python3操作SQL Server数据库(实例讲解)
2017/10/21 Python
python 随机森林算法及其优化详解
2019/07/11 Python
python3 selenium自动化 下拉框定位的例子
2019/08/23 Python
python使用Geany编辑器配置方法
2020/02/21 Python
Python 捕获代码中所有异常的方法
2020/08/03 Python
如何在scrapy中捕获并处理各种异常
2020/09/28 Python
html5画布旋转效果示例
2014/01/27 HTML / CSS
加拿大时尚床上用品零售商:QE Home | Quilts Etc
2018/01/22 全球购物
美国Jeep配件购物网站:Morris 4×4 Center
2019/05/01 全球购物
德国富尔达运动鞋店:43einhalb
2020/12/25 全球购物
个人对照检查材料
2014/02/12 职场文书
会计电算化专业自荐信
2014/03/15 职场文书
人力资源本科毕业生求职信
2014/06/04 职场文书
奔腾年代观后感
2015/06/09 职场文书
生鲜超市—未来中国最具有潜力零售业态
2019/08/02 职场文书
CSS3 制作的悬停缩放特效
2021/04/13 HTML / CSS
解决mysql问题:由于找不到MSVCR120.dll,无法继续执行代码
2021/06/26 MySQL