Networking

網際網路連接中斷警報

  • July 22, 2018

有什麼軟體可以在 5 分鐘內沒有任何網際網路連接時播放警報(PC 揚聲器)?

我的交換機/路由器似乎每隔幾天就會斷開連接,我想在它發生時重置它。

PC          -- TP-Link switch/router -- FO
192.168.x.1 -- 192.168.x.2 / x.y.z.a -- a.b.c.d

您可以使用此腳本的修改版本來執行您想要的操作:

#!/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

如果 ping 失敗,我們現在計算任何停機時間,$downTime否則,我們重置$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再次成功。

那麼聲音呢?

這很容易。您可以使用各種工具來執行此操作。我會使用類似soxor的東西mplayer來播放音頻文件,例如.mp3or.wav文件,您希望每 15 秒聽到一次合適的聲音,而連接斷開。

mplayer someaudio.wav

只需alert用此行替換上面的消息即可獲得連接已斷開的音頻回饋。

ping 超時問題

如果您ping以上述方式使用,您可能會遇到緩慢的延遲時間,ping當連接斷開時,它實際上需要 10-20 秒才能失敗。請參閱我對此 U&L Q&A 的回答,標題為:如何重定向任何命令的輸出?例如,fing改為使用命令行工具。這個工具會比傳統的更快失敗ping

引用自:https://unix.stackexchange.com/questions/136137