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定时检查启动某个exe程序适合检测exe是否挂了
Jan 21 Python
python list 合并连接字符串的方法
Mar 09 Python
Python中集合类型(set)学习小结
Jan 28 Python
python 开发的三种运行模式详细介绍
Jan 18 Python
Python+Selenium+PIL+Tesseract自动识别验证码进行一键登录
Sep 20 Python
Python程序退出方式小结
Dec 09 Python
python2.7使用plotly绘制本地散点图和折线图
Apr 02 Python
一行python实现树形结构的方法
Aug 09 Python
python中通过selenium简单操作及元素定位知识点总结
Sep 10 Python
Django 创建后台,配置sqlite3教程
Nov 18 Python
python使用建议技巧分享(三)
Aug 18 Python
MATLAB 全景图切割及盒图显示的实现步骤
May 14 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中使用mktime获取时间戳的一个黑色幽默分析
2012/05/31 PHP
PHP请求远程地址设置超时时间的解决方法
2016/10/29 PHP
PHP中单例模式与工厂模式详解
2017/02/17 PHP
thinkPHP5.1框架中Request类四种调用方式示例
2019/08/03 PHP
PHP基于进程控制函数实现多线程
2020/12/09 PHP
在HTML中插入JavaScript代码的示例
2015/06/03 Javascript
JS实现弹出居中的模式窗口示例
2016/06/20 Javascript
AngularJs Javascript MVC 框架
2016/06/20 Javascript
十大 Node.js 的 Web 框架(快速提升工作效率)
2017/06/30 Javascript
underscore之Chaining_动力节点Java学院整理
2017/07/10 Javascript
Vue-路由导航菜单栏的高亮设置方法
2018/03/17 Javascript
Koa项目搭建过程详细记录
2018/04/12 Javascript
js 实现在2d平面上画8的方法
2018/10/10 Javascript
Vuex的基本概念、项目搭建以及入坑点
2018/11/04 Javascript
微信小程序分享小程序码的生成(带参数)以及参数的获取
2020/03/25 Javascript
Vue——前端生成二维码的示例
2020/12/19 Vue.js
[02:06]DOTA2英雄基础教程 暗影萨满
2013/12/16 DOTA
[52:40]完美世界DOTA2联赛PWL S2 Magma vs GXR 第一场 11.29
2020/12/02 DOTA
[50:44]DOTA2-DPC中国联赛 正赛 SAG vs Dragon BO3 第二场 2月22日
2021/03/11 DOTA
win10系统中安装scrapy-1.1
2016/07/03 Python
Python使用PDFMiner解析PDF代码实例
2017/03/27 Python
python的构建工具setup.py的方法使用示例
2017/10/23 Python
Python3解决棋盘覆盖问题的方法示例
2017/12/07 Python
Python处理CSV与List的转换方法
2018/04/19 Python
Python配置虚拟环境图文步骤
2019/05/20 Python
python range实例用法分享
2020/02/06 Python
Django更新models数据库结构步骤
2020/04/01 Python
python实现简易版学生成绩管理系统
2020/06/22 Python
使用python批量修改XML文件中图像的depth值
2020/07/22 Python
Python中pass的作用与使用教程
2020/11/13 Python
美体小铺法国官方网站:The Body Shop法国
2020/06/04 全球购物
某公司.Net方向面试题
2014/04/24 面试题
工程造价与财务管理专业应届生求职信
2013/10/06 职场文书
同学聚会老师邀请函
2014/01/28 职场文书
人力资源管理毕业求职信
2014/08/05 职场文书
elementui的el-popover修改样式不生效的解决
2021/06/30 Javascript