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脚本来获取mp3文件tag信息的教程
May 04 Python
用Python编写一个每天都在系统下新建一个文件夹的脚本
May 04 Python
python如何在列表、字典中筛选数据
Mar 19 Python
Python实现朴素贝叶斯分类器的方法详解
Jul 04 Python
python实现对csv文件的列的内容读取
Jul 04 Python
详解将Pandas中的DataFrame类型转换成Numpy中array类型的三种方法
Jul 06 Python
pytorch 更改预训练模型网络结构的方法
Aug 19 Python
基于Python计算圆周率pi代码实例
Mar 25 Python
TensorFlow keras卷积神经网络 添加L2正则化方式
May 22 Python
Python3获取cookie常用三种方案
Oct 05 Python
快速创建python 虚拟环境
Nov 28 Python
利用Python+OpenCV三步去除水印
May 28 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
曾在DC漫画界反派角色扮演的演员,谁才是你心目中的小丑之王?
2020/04/09 欧美动漫
php实现可用于mysql,mssql,pg数据库操作类
2014/12/13 PHP
thinkphp3.2点击刷新生成验证码
2016/02/16 PHP
详解Yii2 rules 的验证规则
2016/12/02 PHP
WEB 浏览器兼容 推荐收藏
2010/05/14 Javascript
关于jquery动态增减控件的一些想法和小插件
2010/08/01 Javascript
jQuery中的bind绑定事件与文本框改变事件的临时解决方法
2010/08/13 Javascript
javascript跟随滚动效果插件代码(javascript Follow Plugin)
2013/08/03 Javascript
javaScript对文字按照拼音排序实现代码
2013/12/27 Javascript
js中的preventDefault与stopPropagation详解
2014/01/29 Javascript
浅析函数声明和函数表达式——函数声明的声明提前
2016/05/03 Javascript
AngularJS基础 ng-readonly 指令简单示例
2016/08/02 Javascript
JavaScript蒙板(model)功能的简单实现代码
2016/08/04 Javascript
Angular2中如何使用ngx-translate进行国际化
2017/05/21 Javascript
AngularJS中controller控制器继承的使用方法
2017/11/03 Javascript
详解Node 定时器
2018/02/26 Javascript
用react-redux实现react组件之间数据共享的方法
2018/06/08 Javascript
在vue中使用echarts图表实例代码详解
2018/10/22 Javascript
JS选取DOM元素常见操作方法实例分析
2018/12/10 Javascript
Javascript模拟实现new原理解析
2020/03/03 Javascript
基于JS实现table导出Excel并保留样式
2020/05/19 Javascript
浅谈React中组件逻辑复用的那些事儿
2020/05/21 Javascript
javascript实现点击小图显示大图
2020/11/29 Javascript
详解Django框架中的视图级缓存
2015/07/23 Python
分享一下Python 开发者节省时间的10个方法
2015/10/02 Python
python多进程实现进程间通信实例
2017/11/24 Python
Python使用jsonpath-rw模块处理Json对象操作示例
2018/07/31 Python
详解Appium+Python之生成html测试报告
2019/01/04 Python
Python属性和内建属性实例解析
2020/01/14 Python
Python爬取YY评级分数并保存数据实现过程解析
2020/06/01 Python
使用python求斐波那契数列中第n个数的值示例代码
2020/07/26 Python
HTML5 progress和meter控件_动力节点Java学院整理
2017/07/06 HTML / CSS
Bjorn Borg官方网上商店:国际运动时尚品牌
2016/08/27 全球购物
意大利制造的西装、衬衫和针对男士量身定制的服装:Lanieri
2018/04/08 全球购物
会计电算化专业应届大学生求职信
2013/10/22 职场文书
物流专业毕业生推荐信范文
2013/11/18 职场文书