我正在尝试制作一个持续运行的脚本,以生成显示 ping 统计信息的日志。我希望日志包含 ping 失败、超过 500 毫秒的时间以及任何超时的跟踪路由。这是我的脚本:
#!/bin/bash
ip=www.google.com
while [ 1 ]; do
ping -c 1 $ip 1> /dev/null
result=$?
if [ $result == "1" ]; then
echo FAIL on `date` >> ~/ping.log
echo FAIL on `date`. Doing tracert!
traceroute $ip >> ~/ping.log
fi
if [ $result == "0" ]; then
echo SUCCEED on `date` >> ~/ping.log
echo SUCCEED on `date`
fi
sleep .4
done
我从另一个网站复制了这个脚本。
答案1
您可能想看一下平它的-t
选项:
-tn
初始目标超时以毫秒为单位(默认 500)。在默认模式下,这是 fping 等待第一个请求响应的时间。连续超时乘以退避因子。
通过使用fping
你可以只检查退出状态而不需要解析输出:
IP=121.78.67.31; fping -c1 -t200 $IP || traceroute $IP
答案2
线
ping -c 1 $ip 1> /dev/null
丢弃结果,因此您无法知道 ping 是否超过 500 毫秒。
使用
ping -c 1 $ip 1> /tmp/ping.txt
保持 ping 的响应,然后
在 ping 成功的部分
awk -F/ 'NF>5 { if ( $5 > 500 ) exit 1 ; else exit 0 }' /tmp/ping.txt
如果平均 ping 超过 500 毫秒,则在 500 毫秒以下给出 0,如果平均 ping 超过 500 毫秒,则给出 1。
ping 结果看起来像
PING 172.18.15.22 (172.18.15.22) 56(84) bytes of data.
64 bytes from 172.18.15.22: icmp_seq=1 ttl=64 time=0.237 ms
--- 172.18.15.22 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.237/0.237/0.237/0.000 ms
awk 将
-F/
使用 / 作为分隔符NF>5
选取至少有 / 的线if ( $5 > 500 )
测试平均值exit 1 / exit 0
给出正确的返回码