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中的各种装饰器详解
Apr 11 Python
python实现根据主机名字获得所有ip地址的方法
Jun 28 Python
详解MySQL数据类型int(M)中M的含义
Nov 20 Python
python机器学习理论与实战(六)支持向量机
Jan 19 Python
使用pycharm生成代码模板的实例
May 23 Python
python实现屏保程序(适用于背单词)
Jul 30 Python
Django模板导入母版继承和自定义返回Html片段过程解析
Sep 18 Python
Flask框架请求钩子与request请求对象用法实例分析
Nov 07 Python
tensorflow实现将ckpt转pb文件的方法
Apr 22 Python
文件上传服务器-jupyter 中python解压及压缩方式
Apr 22 Python
Django模板标签{% for %}循环,获取制定条数据实例
May 14 Python
超级详细实用的pycharm常用快捷键
May 12 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学习笔记之一
2011/01/17 PHP
php格式化时间戳显示友好的时间实现思路及代码
2014/10/23 PHP
Yii实现多按钮保存与提交的方法
2014/12/03 PHP
phplot生成图片类用法详解
2015/01/06 PHP
Zend Framework动作助手Json用法实例分析
2016/03/05 PHP
php组合排序简单实现方法
2016/10/15 PHP
thinkPHP5.0框架开发规范简介
2017/03/25 PHP
实例讲解php实现多线程
2019/01/27 PHP
Node.js插件的正确编写方式
2014/08/03 Javascript
Egret引擎开发指南之创建项目
2014/09/03 Javascript
js判断当前页面用什么浏览器打开的方法
2016/01/06 Javascript
Node.js测试中的Mock文件系统详解
2016/11/21 Javascript
微信小程序picker组件简单用法示例【附demo源码下载】
2017/12/05 Javascript
JavaScript数组去重算法实例小结
2018/05/07 Javascript
jquery插件开发模式实例详解
2019/07/20 jQuery
JavaScript运行机制实例分析
2020/04/11 Javascript
JQuery使用数组遍历跳出each循环
2020/09/01 jQuery
在IIS服务器上以CGI方式运行Python脚本的教程
2015/04/25 Python
Python OpenCV 直方图的计算与显示的方法示例
2018/02/08 Python
python 实现语音聊天机器人的示例代码
2018/12/02 Python
python mysql 字段与关键字冲突的解决方式
2020/03/02 Python
python支持多继承吗
2020/06/19 Python
python批量生成条形码的示例
2020/10/10 Python
Hotels.com爱尔兰:全球酒店预订
2017/02/24 全球购物
lookfantastic荷兰:在线购买奢华护肤、护发和化妆品
2018/11/27 全球购物
Maisons du Monde德国:法国家具和装饰的市场领导者
2019/07/26 全球购物
Windows和Linux动态库应用异同
2016/07/28 面试题
八项规定整改措施
2014/02/12 职场文书
中学教师教育感言
2014/02/21 职场文书
小学生元旦广播稿
2014/02/21 职场文书
健康状况证明模板
2014/10/23 职场文书
作风建设年度心得体会
2014/10/29 职场文书
出差报告格式模板
2014/11/06 职场文书
获奖感言一句话
2015/07/31 职场文书
2019学子的答谢词范本!
2019/07/05 职场文书
Vue3.0写自定义指令的简单步骤记录
2021/06/27 Vue.js