有什么软件可以在 5 分钟没有任何互联网连接时发出警报(PC 扬声器)?
我的交换机/路由器似乎每隔几天就会断开连接,我想在发生这种情况时重置它。
PC -- TP-Link switch/router -- FO
192.168.x.1 -- 192.168.x.2 / x.y.z.a -- a.b.c.d
答案1
您可以使用此脚本的修改版本来执行您想要的操作:
#!/bin/bash
downTime=0
lastAccessTime=$(date +"%s")
while [ true ]; do
if ! ping -c1 google.com >& /dev/null; then
downTime=$(( $(date +"%s") - $lastAccessTime ))
else
downTime=0
lastAccessTime=$(date +"%s")
fi
sleep 15
if [ $downTime -ge 300 ]; then
echo "alert"
fi
done
我们“已连接”示例
打开调试后,您可以看到脚本正在做什么。
set -x
使用有效的主机名运行以演示“连接已启动”状态。
$ ./watcher.bash
+ downTime=0
++ date +%s
+ lastAccessTime=1402276955
+ '[' true ']'
上面初始化了几个变量并确定了我们上次执行循环的时间$lastAccessTime
。我们现在尝试 ping Google。
+ ping -c1 google.com
+ downTime=0
++ date +%s
+ lastAccessTime=1402276955
$downTime
如果 ping 失败,我们现在计算任何停机时间 ,否则,我们重置$downTime
为零,并重新计算$lastAccessTime
。
+ sleep 15
现在我们等待 15 秒。
+ '[' 0 -ge 300 ']'
现在我们检查是否已经停机超过 5 分钟(300 秒)。然后我们重复执行while
循环。
+ '[' true ']'
+ ping -c1 google.com
+ downTime=0
++ date +%s
+ lastAccessTime=1402276970
+ sleep 15
....
只要我们启动了,除了ping
每 15 秒检查一次命令之外,什么都不会发生。
我们“已断开连接”示例
现在,为了模拟“连接已关闭”状态,我们将替换正在 ping 的主机名并使用假主机名google1234567890.com
.在启用调试的情况下重复运行我们的脚本,我们现在可以看到计算出一些实际的停机时间。
$ ./watcher.bash
+ downTime=0
++ date +%s
+ lastAccessTime=1402277506
+ '[' true ']'
+ ping -c1 google1234567890.com
++ date +%s
+ downTime=0
+ sleep 15
+ '[' 0 -ge 300 ']'
+ '[' true ']'
+ ping -c1 google1234567890.com
++ date +%s
+ downTime=15
+ sleep 15
...
请注意,到目前为止,上面的时间$downTime
等于 15 秒。如果我们再等一会儿,我们会看到这个:
+ '[' true ']'
+ ping -c1 google1234567890.com
++ date +%s
+ downTime=300
+ sleep 15
我们已经累计了 300 秒的停机时间。所以现在当我们检查时,我们打印消息,alert
。
+ '[' 300 -ge 300 ']'
+ echo alert
alert
+ '[' true ']'
+ ping -c1 google1234567890.com
++ date +%s
+ downTime=315
+ sleep 15
此状态将持续到连接恢复且ping
再次成功为止。
那么声音呢?
这很容易。您可以使用多种工具来执行此操作。当连接断开时,我会使用类似sox
或 的东西mplayer
来播放音频文件,例如.mp3
或.wav
文件,其中包含您希望每 15 秒听到一次的适当声音。
mplayer someaudio.wav
只需用此行替换alert
上面的消息即可获得连接已断开的音频反馈。
ping 超时问题
如果您ping
按照上述方式使用,您可能会遇到缓慢的延迟时间,ping
当连接断开时,实际上需要 10-20 秒才会失败。请参阅我对此 U&L 问答的回答,标题为:如何重定向任何命令的输出?例如使用命令行工具fing
。该工具比传统的工具失败得更快ping
。
答案2
如果您使用的是 Linux,您可以在脚本中使用 ping,例如google.com
:
counter=0
while [ true ]
do
ping -c 1 google.com > /dev/null 2>&1
if [ $? -ne 0 ]
then
let "counter +=1"
else
let "counter = 0"
fi
if [ $counter -eq 300 ] # we assume that one ping need one second (300 is 5 minutes)
then
echo "alert"
fi
done