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从ftp下载数据保存实例
Nov 20 Python
python循环监控远程端口的方法
Mar 14 Python
浅析Python中signal包的使用
Nov 13 Python
Python教程之全局变量用法
Jun 27 Python
手把手教你python实现SVM算法
Dec 27 Python
Python3实现将本地JSON大数据文件写入MySQL数据库的方法
Jun 13 Python
Python global全局变量函数详解
Sep 18 Python
浅析Python数字类型和字符串类型的内置方法
Dec 22 Python
np.dot()函数的用法详解
Jan 17 Python
python GUI库图形界面开发之PyQt5图片显示控件QPixmap详细使用方法与实例
Feb 27 Python
Python threading模块condition原理及运行流程详解
Oct 05 Python
python3 使用ssh隧道连接mysql的操作
Dec 05 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 随机数的深入理解
2013/06/05 PHP
php命名空间学习详解
2014/02/27 PHP
PHP aes (ecb)解密后乱码问题
2015/06/22 PHP
PHP面试常用算法(推荐)
2016/07/22 PHP
Laravel实现自定义错误输出内容的方法
2016/10/10 PHP
PHP实现的下载远程文件类定义与用法示例
2017/07/05 PHP
tp5.1框架数据库子查询操作实例分析
2020/05/26 PHP
传智播客学习之JavaScript基础篇
2009/11/13 Javascript
js获取当前select 元素值的代码
2010/04/19 Javascript
javascript showModalDialog 内跳转页面的问题
2010/11/25 Javascript
jquery cookie实现的简单换肤功能适合小网站
2013/08/25 Javascript
firefox下jquery ajax返回object XMLDocument处理方法
2014/01/26 Javascript
JS使用replace()方法和正则表达式进行字符串的搜索与替换实例
2014/04/10 Javascript
取得元素的左和上偏移量的方法
2014/09/17 Javascript
js中的闭包学习心得
2018/02/06 Javascript
一次记住JavaScript的6个正则表达式方法
2018/02/22 Javascript
详解Angular5路由传值方式及其相关问题
2018/04/28 Javascript
Vue中 key keep-alive的实现原理
2018/09/18 Javascript
vue+echarts实现动态绘制图表及异步加载数据的方法
2018/10/17 Javascript
Python 中的 else详解
2016/04/23 Python
python使用正则表达式替换匹配成功的组
2017/11/17 Python
Centos7 Python3下安装scrapy的详细步骤
2018/03/15 Python
解析PyCharm Python运行权限问题
2020/01/08 Python
pytorch nn.Conv2d()中的padding以及输出大小方式
2020/01/10 Python
Python爬虫获取豆瓣电影并写入excel
2020/07/31 Python
python判断all函数输出结果是否为true的方法
2020/12/03 Python
python中xlrd模块的使用详解
2021/02/01 Python
html5 canvas 画图教程案例分析
2012/11/23 HTML / CSS
新加坡最受追捧的体验平台:Hapz
2018/01/01 全球购物
2014年财务科工作总结
2014/11/11 职场文书
结婚保证书
2015/01/16 职场文书
大学生个人总结范文
2015/02/15 职场文书
慰问信格式规范
2015/03/23 职场文书
2015年“七七卢沟桥事变”纪念活动总结
2015/03/24 职场文书
致运动员加油稿
2015/07/21 职场文书
vue-cli3.x配置全局的scss的时候报错问题及解决
2022/04/30 Vue.js