用于 Ping IP 并创建日志的脚本,显示任何失败的日期/时间、超过 500 毫秒的时间以及跟踪任何失败的路由

用于 Ping IP 并创建日志的脚本,显示任何失败的日期/时间、超过 500 毫秒的时间以及跟踪任何失败的路由

我正在尝试制作一个持续运行的脚本,以生成显示 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给出正确的返回码

相关内容