互联网连接断开警报

互联网连接断开警报

有什么软件可以在 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

相关内容