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对CSV、Excel、txt、dat文件的处理
Sep 18 Python
python 使用 requests 模块发送http请求 的方法
Dec 09 Python
python获取Pandas列名的几种方法
Aug 07 Python
Django结合ajax进行页面实时更新的例子
Aug 12 Python
Pycharm创建项目时如何自动添加头部信息
Nov 14 Python
python判断两个序列的成员是否一样的实例代码
Mar 01 Python
tensorflow图像裁剪进行数据增强操作
Jun 30 Python
python 用struct模块解决黏包问题
Nov 07 Python
python 实现一个图形界面的汇率计算器
Nov 09 Python
pycharm 配置svn的图文教程(手把手教你)
Jan 15 Python
Pytorch实现WGAN用于动漫头像生成
Mar 04 Python
python实现简单的井字棋
May 26 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获取字段名示例分享
2014/03/03 PHP
php生成shtml类用法实例
2014/12/09 PHP
Notify - 基于jquery的消息通知插件
2011/10/18 Javascript
jquery及原生js获取select下拉框选中的值示例
2013/10/25 Javascript
ExtJS[Desktop]实现图标换行示例代码
2013/11/17 Javascript
jquery中change()用法实例分析
2015/02/06 Javascript
Bootstrap轮播加上css3动画,炫酷到底!
2015/12/22 Javascript
动态加载js、css的简单实现代码
2016/05/26 Javascript
基于cssSlidy.js插件实现响应式手机图片轮播效果
2016/08/30 Javascript
BootStrap实现鼠标悬停下拉列表功能
2017/02/17 Javascript
微信小程序 swiper组件构建轮播图的实例
2017/09/20 Javascript
详解Vue CLI 3.0脚手架如何mock数据
2018/11/23 Javascript
Vue项目总结之webpack常规打包优化方案
2019/06/06 Javascript
python定时采集摄像头图像上传ftp服务器功能实现
2013/12/23 Python
python执行子进程实现进程间通信的方法
2015/06/02 Python
详解Python设计模式编程中观察者模式与策略模式的运用
2016/03/02 Python
Python 类的特殊成员解析
2018/06/20 Python
利用Python如何生成便签图片详解
2018/07/09 Python
pandas把所有大于0的数设置为1的方法
2019/01/26 Python
Django项目中添加ldap登陆认证功能的实现
2019/04/04 Python
python 实现12bit灰度图像映射到8bit显示的方法
2019/07/08 Python
TensorFlow基于MNIST数据集实现车牌识别(初步演示版)
2019/08/05 Python
简单了解python数组的基本操作
2019/11/26 Python
python中random.randint和random.randrange的区别详解
2020/09/20 Python
python 如何读、写、解析CSV文件
2021/03/03 Python
详解如何用canvas画一个微笑的表情
2019/03/14 HTML / CSS
Staples美国官方网站:办公用品一站式采购
2016/07/28 全球购物
RentCars.com巴西:汽车租赁网站
2016/08/22 全球购物
德国最大的婴儿用品网上商店:Kidsroom.de(支持中文)
2020/09/02 全球购物
Electric官网:美国高级眼镜和配件品牌
2020/06/04 全球购物
办公室驾驶员岗位职责
2013/11/15 职场文书
力学专业毕业生自荐信
2013/11/17 职场文书
幼儿园教师教育感言
2014/02/28 职场文书
党员干部形式主义个人整改措施
2014/09/17 职场文书
担保书范本
2015/01/20 职场文书
2015秋学期开学寄语
2015/05/28 职场文书