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抓取网页正文的源码
Jun 11 Python
使用Python将数组的元素导出到变量中(unpacking)
Oct 27 Python
Python正则表达式使用范例分享
Dec 04 Python
使用python实现knn算法
Dec 20 Python
Python操作mongodb数据库的方法详解
Dec 08 Python
Django中使用MySQL5.5的教程
Dec 18 Python
TensorFlow基本的常量、变量和运算操作详解
Feb 03 Python
Python龙贝格法求积分实例
Feb 29 Python
Python datetime 如何处理时区信息
Sep 02 Python
python 用opencv实现图像修复和图像金字塔
Nov 27 Python
Python之多进程与多线程的使用
Feb 23 Python
Elasticsearch 数据类型及管理
Apr 19 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 skymvc 一款轻量、简单的php
2011/06/28 PHP
php 错误处理经验分享
2011/10/11 PHP
PHP register_shutdown_function()函数的使用示例
2015/06/23 PHP
PHP中使用array函数新建一个数组
2015/11/19 PHP
PHP实践教程之过滤、验证、转义与密码详解
2017/07/24 PHP
javascript appendChild,innerHTML,join性能比较代码
2009/08/29 Javascript
jQuery 使用手册(四)
2009/09/23 Javascript
Ajax 数据请求的简单分析
2011/04/05 Javascript
JavaScript 用Node.js写Shell脚本[译]
2012/09/20 Javascript
分析Node.js connect ECONNREFUSED错误
2013/04/09 Javascript
JavaScript程序员应该知道的45个实用技巧
2014/03/04 Javascript
jQuery的one()方法用法实例
2015/01/19 Javascript
AspNet中使用JQuery boxy插件的确认框
2015/05/20 Javascript
jQuery实现页面评论栏中访客信息自动填写功能的方法
2016/05/23 Javascript
AngularJS入门教程之ng-class 指令用法
2016/08/01 Javascript
基于JavaScript实现随机颜色输入框
2016/12/10 Javascript
纯JS单页面赛车游戏制作代码分享
2017/03/03 Javascript
Bootstrap Tree View简单而优雅的树结构组件实例解析
2017/06/15 Javascript
JavaScript正则表达式校验与递归函数实际应用实例解析
2017/08/04 Javascript
移动端Ionic App 资讯上下循环滚动的实现代码(跑马灯效果)
2017/08/29 Javascript
angularjs性能优化的方法
2018/09/05 Javascript
利用Bootstrap Multiselect实现下拉框多选功能
2019/04/08 Javascript
js实现弹出框的拖拽效果实例代码详解
2019/04/16 Javascript
vue制作抓娃娃机的示例代码
2020/04/17 Javascript
python在控制台输出进度条的方法
2015/06/20 Python
django如何实现视图重定向
2019/07/24 Python
解决安装python3.7.4报错Can''t connect to HTTPS URL because the SSL module is not available
2019/07/31 Python
Python数据可视化:幂律分布实例详解
2019/12/07 Python
python plotly画柱状图代码实例
2019/12/13 Python
python图形开发GUI库pyqt5的详细使用方法及各控件的属性与方法
2020/02/14 Python
长安大学毕业生自我鉴定
2014/01/17 职场文书
十佳大学生事迹材料
2014/01/29 职场文书
介绍长城的导游词
2015/01/30 职场文书
2015年秋季学校开学标语
2015/07/16 职场文书
2016年感恩节寄语
2015/12/07 职场文书
PostgreSQL数据库去除重复数据和运算符的基本查询操作
2022/04/12 PostgreSQL