Python实现检测服务器是否可以ping通的2种方法
admin
2023-07-31 02:10:26
0

好想在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结果如下:

其实结果就两个 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!\’

将这个搞成计划任务,每天跑几遍,还是挺赞的。 呵呵。。

相关内容

热门资讯

500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
python查找阿姆斯特朗数 题目解释 如果一个n位正整数等于其各位数字的n次方之和,则称该数为阿姆斯特朗数。 例如1^3 + 5...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...