脚本在设定的时间内每秒执行 ping 操作,暂停设定的时间,然后重复

脚本在设定的时间内每秒执行 ping 操作,暂停设定的时间,然后重复

编辑:我的结论是这个问题发布在错误的地方。我发布在 Mac OS 特定论坛中,立即得到了答案。

我发现有时会出现互联网连接问题,持续约 4 秒,约 15 秒恢复正常,然后再次发生。据我所知,这个问题一次可能会持续 5 到 7 个小时。我想更好地了解它,以便我可以将其传达给我的互联网服务提供商。

到目前为止,我一直在使用:

ping 8.8.8.8 | while read line; do echo `date` - $line; done

重要的是,它每秒都会包含一个 ping 时间戳。我有一个脚本来使用时间戳绘制结果。但由于该问题可能每周只发生 2 到 3 次,因此它收集了很多不必要的数据,然后我必须对这些数据进行整理。

我想要的是每秒 ping 一次设定的时间(例如 5-10 分钟),然后暂停一段设定的时间(再次,例如 5-10 分钟)。我知道有一个sleep命令并且我尝试过使用它;但我还没有达到我的目标。

答案1

您可以更改 的间隔和集合属性ping。文档 ( man ping) 包含大量信息,但您可能想从此开始。

#!/bin/sh
target=1.1.1.1     # Ping target
delay=$((60*5))    # Seconds (5 minutes)

while :
do
    # Linux (GNU)
    # ping -4 -q -n -c3 -i1 -w4 "$target" >/dev/null 2>&1 && st=ok || st=error
    # Mac (OSX)
    ping -q -n -c3 -i1 -t4 "$target" >/dev/null 2>&1 && st=ok || st=error
    printf "%s - %s\n" "$(date)" "$st"
    sleep "$delay"
done

将其放入诸如 之类的文件中pingit,并使用 使脚本可执行chmod a+x pingit。然后您可以将其运行为./pingit.

它每五分钟发送三个连续的 ping。如果成功,则视为“正常”,否则视为“错误”。

另一种选择是删除while … do...循环构造并从每个循环done中调用脚本的其余部分cron分钟。

相关内容