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 相关文章推荐
Python2.6版本中实现字典推导 PEP 274(Dict Comprehensions)
Apr 28 Python
Python编写生成验证码的脚本的教程
May 04 Python
python实现简单加密解密机制
Mar 19 Python
Python深拷贝与浅拷贝用法实例分析
May 05 Python
Python 中PyQt5 点击主窗口弹出另一个窗口的实现方法
Jul 04 Python
Django项目使用CircleCI的方法示例
Jul 14 Python
Django获取应用下的所有models的例子
Aug 30 Python
python3实现微型的web服务器
Sep 03 Python
pygame实现五子棋游戏
Oct 29 Python
python数值基础知识浅析
Nov 19 Python
完美解决Django2.0中models下的ForeignKey()问题
May 19 Python
python 多态 协议 鸭子类型详解
Nov 27 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连接Access数据库的注意事项
2016/08/12 PHP
php中分页及SqlHelper类用法实例
2017/01/12 PHP
php实现姓名根据首字母排序的类与方法(实例代码)
2018/05/16 PHP
PHP扩展mcrypt实现的AES加密功能示例
2019/01/29 PHP
json简单介绍
2008/06/10 Javascript
Jquery实现无刷新DropDownList联动实现代码
2010/03/08 Javascript
基于jquery的一个图片hover的插件
2010/04/24 Javascript
js控制CSS样式属性语法对照表
2012/12/11 Javascript
JQuery基础语法小结
2015/02/27 Javascript
jquery实现根据浏览器窗口大小自动缩放图片的方法
2015/07/17 Javascript
一道JS前端闭包面试题解析
2015/12/25 Javascript
基于JavaScript如何制作遮罩层对话框
2016/01/26 Javascript
javascript小数精度丢失的完美解决方法
2016/05/31 Javascript
JS生成和下载二维码的代码
2016/12/07 Javascript
微信小程序访问node.js接口服务器搭建教程
2017/04/25 Javascript
Javascript循环删除数组中元素的几种方法示例
2017/05/18 Javascript
JS设置随机出现2个数字的实例代码
2017/07/19 Javascript
Vue中使用clipboard实现复制功能
2018/09/05 Javascript
微信小程序使用 vant Dialog组件的正确方式
2020/02/21 Javascript
python中对list去重的多种方法
2014/09/18 Python
Python中shape计算矩阵的方法示例
2017/04/21 Python
用python生成(动态彩色)二维码的方法(使用myqr库实现)
2019/06/24 Python
用Python调用win命令行提高工作效率的实例
2019/08/14 Python
python实现梯度下降和逻辑回归
2020/03/24 Python
Python实例方法、类方法、静态方法区别详解
2020/09/05 Python
CSS3的文字阴影—text-shadow的使用方法
2012/12/25 HTML / CSS
纯CSS3实现运行时钟的示例代码
2021/01/25 HTML / CSS
英国最大的婴儿监视器网上商店:Baby Monitors Direct
2018/04/24 全球购物
Glamest意大利:女性在线奢侈品零售店
2019/04/28 全球购物
SEPHORA丝芙兰德国官方购物网站:化妆品、护肤品和香水
2020/01/21 全球购物
遗体告别仪式主持词
2014/03/20 职场文书
助人为乐模范事迹材料
2014/06/02 职场文书
检察机关个人对照检查材料
2014/09/15 职场文书
元宵节寄语大全
2015/02/27 职场文书
捐款通知怎么写
2015/04/24 职场文书
如何在centos上使用yum安装rabbitmq-server
2021/03/31 Servers