让 ping 继续 运行 即使网络消失

Make ping continue running even if network disappears

我正在终端 (ubuntu 18.04) 中使用以下命令通过 ping 测试评估 ISP 质量:

sudo ping -i .001 -w 900 -W 899 www.google.com  |
while read pong; do
    echo "$(date +"%T.%N"): $pong"
done > "test_$(date +"%Y_%m_%d__%H%M").txt"

测试旨在 运行 15 分钟 (-w 900),但是如果互联网连接丢失(即路由器关闭),该命令将停止 运行ning 并且文本文件已关闭。

我尝试使用 -W 选项(超时)但没有成功。

有没有办法让命令尝试重新连接并继续测试?

跟踪这些断开连接对于分析很重要。

您可以使用 运行 15 分钟的循环包装支票。每次测试可限时1分钟,

START=$SECONDS
while ((SECONDS-START<15*60)) ; do
    S1=$SECONDS
    sudo ping -i .001 -w 60 -W 899 www.google.com  |
    while read pong; do
        echo "$(date +"%T.%N"): $pong"
    done
    if ((SECONDS-S1<59)) ; then
        echo "Disconnect"
        sleep 1
    fi

done > "test_$(date +"%Y_%m_%d__%H%M").txt"

关注https://serverfault.com/questions/503820/linux-ping-command-exits-early-due-to-icmp-host-unreachable

这是一个可以接受的解决方案:

sudo timeout 900s ping -i .001 www.google.com  |
while read pong; do 
   echo "$(date +"%T.%N"): $pong"
done > "test_$(date +"%Y_%m_%d__%H%M").txt"

如 link 所述,-w 选项有一个奇怪的行为,即在网络断开后退出 ping 命令。

此解决方案的缺点是 ping 统计输出丢失。