5分間インターネット接続がないときにアラーム(PCスピーカー)を鳴らすことができるソフトウェアはありますか?
私のスイッチ/ルーターが数日に1回ずつ切断されているようです。
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
。今Googleにpingを試してみましょう。
+ ping -c1 google.com
+ downTime=0
++ date +%s
+ lastAccessTime=1402276955
$downTime
$downTime
pingが失敗した場合はダウンタイムを計算し、それ以外の場合は0にリセットして再計算します$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
オーディオファイルを再生します。たとえば、15秒ごとに聞きたい適切なサウンドを含むファイル.mp3
またはファイルを再生します。.wav
mplayer someaudio.wav
alert
接続が切断されたというオーディオフィードバックを受信するには、上記のメッセージをこの行に置き換えてください。
pingタイムアウトの問題
上記のように使用すると、接続が切断されると文字通り10〜20秒かかり、失敗する遅延ping
時間が発生する可能性があります。ping
次のタイトルのU&L Q&Aに対する私の回答をご覧ください。コマンドの出力をリダイレクトする方法は?たとえば、コマンドラインツールを使用します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