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
i,record[i],'----ping failed----'
else:
ping_ok.append(record[i])
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