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获取豆瓣电影简介代码分享
Jan 16 Python
python MySQLdb Windows下安装教程及问题解决方法
May 09 Python
深入浅出学习python装饰器
Sep 29 Python
详解appium+python 启动一个app步骤
Dec 20 Python
Python实现屏幕截图的两种方式
Feb 05 Python
对python 生成拼接xml报文的示例详解
Dec 28 Python
在python中用url_for构造URL的方法
Jul 25 Python
python设置环境变量的作用整理
Feb 17 Python
Python实现的北京积分落户数据分析示例
Mar 27 Python
Python ArgumentParse的subparser用法说明
Apr 20 Python
python用opencv完成图像分割并进行目标物的提取
May 25 Python
python实例化对象的具体方法
Jun 17 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
thinkPHP5.0框架引入Traits功能实例分析
2017/03/18 PHP
thinkPHP框架整合tcpdf插件操作示例
2018/08/07 PHP
在标题栏显示新消息提示,很多公司项目中用到这个方法
2011/11/04 Javascript
网页编辑器ckeditor和ckfinder配置步骤分享
2012/05/24 Javascript
Javascript获取HTML静态页面参数传递值示例
2013/08/18 Javascript
JS取文本框中最小值的简单实例
2013/11/29 Javascript
js判断undefined类型,undefined,null, 的区别详细解析
2013/12/16 Javascript
全面解析JS字符串和正则表达式中的match、replace、exec等函数
2016/07/01 Javascript
老生常谈javascript的类型转换
2016/10/12 Javascript
jQuery图片拖动组件Dropzone用法示例
2017/01/17 Javascript
给Easyui-Datebox设置隐藏或者不可用的解决方法
2017/05/26 Javascript
基于vue-element组件实现音乐播放器功能
2018/05/06 Javascript
在vue中v-bind使用三目运算符绑定class的实例
2018/09/29 Javascript
node和vue实现商城用户地址模块
2018/12/05 Javascript
vue项目出现页面空白的解决方案
2019/10/31 Javascript
JavaScript canvas实现跟随鼠标移动小球
2021/02/09 Javascript
[06:21]完美世界亚洲区首席发行官竺琦TI3采访
2013/08/26 DOTA
python shell根据ip获取主机名代码示例
2017/11/25 Python
基于循环神经网络(RNN)的古诗生成器
2018/03/26 Python
python实现大文件分割与合并
2019/07/22 Python
python FTP编程基础入门
2021/02/27 Python
Booking.com英国官网:全球酒店在线预订网站
2018/04/21 全球购物
如何开发安全的AJAX应用
2014/03/26 面试题
大学生入党自我鉴定
2013/10/31 职场文书
酒后驾驶检讨书
2014/01/27 职场文书
信息员培训方案
2014/06/12 职场文书
群众路线个人整改方案
2014/10/25 职场文书
本科毕业论文导师评语
2014/12/31 职场文书
《迟到》教学反思
2016/02/24 职场文书
先进基层党组织事迹材料2016
2016/02/29 职场文书
2016大学先进团支部事迹材料
2016/03/01 职场文书
go原生库的中bytes.Buffer用法
2021/04/25 Golang
Golang之sync.Pool使用详解
2021/05/06 Golang
详解python的内存分配机制
2021/05/10 Python
mysql 8.0.24版本安装配置方法图文教程
2021/05/12 MySQL
MySQL query_cache_type 参数与使用详解
2021/07/01 MySQL