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 中的列表解析和生成表达式
Mar 10 Python
进一步理解Python中的函数编程
Apr 13 Python
详解Python中open()函数指定文件打开方式的用法
Jun 04 Python
Python实现的递归神经网络简单示例
Aug 11 Python
Python实现可获取网易页面所有文本信息的网易网络爬虫功能示例
Jan 15 Python
python实现12306抢票及自动邮件发送提醒付款功能
Mar 08 Python
对TensorFlow的assign赋值用法详解
Jul 30 Python
python json.loads兼容单引号数据的方法
Dec 19 Python
基于django ManyToMany 使用的注意事项详解
Aug 09 Python
python爬虫 猫眼电影和电影天堂数据csv和mysql存储过程解析
Sep 05 Python
Django框架下静态模板的继承操作示例
Nov 08 Python
Pytest参数化parametrize使用代码实例
Feb 22 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 ios推送(代码)
2013/07/01 PHP
C# WinForm中实现快捷键自定义设置实例
2015/01/23 PHP
PHP答题类应用接口实例
2015/02/09 PHP
实现PHP+Mysql无限分类的方法汇总
2015/03/02 PHP
PHP环境搭建的详细步骤
2016/06/30 PHP
laravel 去掉index.php伪静态的操作方法
2019/10/12 PHP
鼠标右击事件代码(asp.net后台)
2011/01/27 Javascript
JavaScript运算符小结
2015/06/03 Javascript
javascript实现一个数值加法函数
2015/06/26 Javascript
总结JavaScript中布尔操作符||与&amp;&amp;的使用技巧
2015/11/17 Javascript
js从数组中删除指定值(不是指定位置)的元素实现代码
2016/09/13 Javascript
livereload工具实现前端可视化开发【推荐】
2016/12/23 Javascript
Node.js 中exports 和 module.exports 的区别
2017/03/14 Javascript
Vue引用第三方datepicker插件无法监听datepicker输入框的值的解决
2018/01/27 Javascript
vuejs前后端数据交互之从后端请求数据的实例
2018/08/11 Javascript
解决Vue.js由于延时显示了{{message}}引用界面的问题
2018/08/25 Javascript
详解ES6 Fetch API HTTP请求实用指南
2018/11/14 Javascript
javascript异常处理实现原理详解
2020/02/17 Javascript
js实现浏览器打印功能的示例代码
2020/07/15 Javascript
js实现随机圆与矩形功能
2020/10/29 Javascript
[01:20]DOTA2更新全新英雄 天涯墨客现已加入游戏
2018/08/25 DOTA
Tensorflow的可视化工具Tensorboard的初步使用详解
2018/02/11 Python
Django REST framework 分页的实现代码
2019/06/19 Python
Apache部署Django项目图文详解
2019/07/30 Python
Python检查图片是否损坏及图片类型是否正确过程详解
2019/09/30 Python
python GUI库图形界面开发之PyQt5切换按钮控件QPushButton详细使用方法与实例
2020/02/28 Python
植物选择:Botanic Choice
2017/02/15 全球购物
戴尔新西兰官网:Dell New Zealand
2020/01/07 全球购物
黑猩猩商店:The Chimp Store
2020/02/12 全球购物
eBay美国官网:eBay.com
2020/10/24 全球购物
母亲七十大寿答谢词
2014/01/18 职场文书
《争吵》教学反思
2014/02/15 职场文书
简单租房协议书
2014/10/21 职场文书
2015年度团总支工作总结
2015/04/23 职场文书
辣妈辣妹观后感
2015/06/10 职场文书
MySQL 表锁定 LOCK和UNLOCK TABLES的 SQL语法
2022/04/18 MySQL