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如何调用C/C++底层库与互相传值
Aug 10 Python
Python+matplotlib绘制不同大小和颜色散点图实例
Jan 19 Python
Python中的并发处理之asyncio包使用的详解
Apr 03 Python
用TensorFlow实现多类支持向量机的示例代码
Apr 28 Python
Python小工具之消耗系统指定大小内存的方法
Dec 03 Python
一篇文章了解Python中常见的序列化操作
Jun 20 Python
pytorch 在网络中添加可训练参数,修改预训练权重文件的方法
Aug 17 Python
Python中zip()函数的简单用法举例
Sep 02 Python
浅析python标准库中的glob
Mar 13 Python
详解向scrapy中的spider传递参数的几种方法(2种)
Sep 28 Python
浅谈Selenium 控制浏览器的常用方法
Dec 04 Python
利用Python函数实现一个万历表完整示例
Jan 23 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
THINKPHP+JS实现缩放图片式截图的实现
2010/03/07 PHP
PHP flush()与ob_flush()的区别详解
2013/06/03 PHP
深入PHP nl2br()格式化输出的详解
2013/06/05 PHP
PHP实现通过get方式识别用户发送邮件的方法
2015/07/16 PHP
php数字运算验证码的实现代码
2015/07/30 PHP
Thinkphp 框架基础之入口文件功能、定义与用法分析
2020/04/27 PHP
通过修改referer下载文件的方法
2008/05/11 Javascript
jQuery 创建Dom元素
2010/05/07 Javascript
js图片延迟加载的实现方法及思路
2013/07/22 Javascript
选择器中含有空格在使用示例及注意事项
2013/07/31 Javascript
浏览器中url存储的JavaScript实现
2015/07/07 Javascript
数据分析软件之FineReport教程:[5]参数界面JS(全)
2015/08/13 Javascript
jquery 中toggle的2种用法详解(推荐)
2016/09/02 Javascript
Bootstrap的Carousel配合dropload.js实现移动端滑动切换图片
2017/03/10 Javascript
详解webpack和webpack-simple中如何引入css文件
2017/06/28 Javascript
jQuery 改变P标签文本值方法
2018/02/24 jQuery
详解webpack 入门与解析
2018/04/09 Javascript
在Vue中使用axios请求拦截的实现方法
2018/10/25 Javascript
微信小程序实现折线图的示例代码
2019/06/07 Javascript
[33:09]完美世界DOTA2联赛循环赛 Forest vs DM BO2第二场 10.29
2020/10/29 DOTA
python爬虫入门教程之糗百图片爬虫代码分享
2014/09/02 Python
Python实现批量转换文件编码的方法
2015/07/28 Python
Python 判断 有向图 是否有环的实例讲解
2018/02/01 Python
django 通过ajax完成邮箱用户注册、激活账号的方法
2018/04/17 Python
Python 运行 shell 获取输出结果的实例
2019/01/07 Python
django框架使用orm实现批量更新数据的方法
2019/06/21 Python
TENSORFLOW变量作用域(VARIABLE SCOPE)
2020/01/10 Python
python实现图像拼接功能
2020/03/23 Python
tensorflow2.0的函数签名与图结构(推荐)
2020/04/28 Python
python 决策树算法的实现
2020/10/09 Python
python爬取股票最新数据并用excel绘制树状图的示例
2021/03/01 Python
党员公开承诺书内容
2014/05/20 职场文书
博士生导师推荐信
2014/07/08 职场文书
党的群众路线教育实践活动方案
2014/10/31 职场文书
2015年电话销售工作总结范文
2015/04/20 职场文书
创新创业项目计划书该怎样写?
2019/08/13 职场文书