インターネット接続切断アラート


9

5分間インターネット接続がない場合にアラート(PCスピーカー)を再生するソフトウェアは何ですか?

スイッチ/ルーターが数日ごとに切断されるようですが、発生したらリセットしたいと思います。

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

3
明白なことを指摘するわけではありませんが、スイッチ/ルーターの障害の問題に対して非常に遠回りの解決策をとっています
Michael Mrozek

回答:


7

このスクリプトの変更バージョンを使用して、必要な操作を実行できます。

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

起動している限り、ping15秒ごとにコマンドで確認する以外は何も起こりません。

私たちは「切断された」例です

「接続がダウンしている」状態をシミュレートするために、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またはのようなものを使用して、接続がダウンしている間、15秒ごとに聞きたい適切なサウンドのやmplayerファイルなどのオーディオファイルを再生します。.mp3.wav

mplayer someaudio.wav

alert上記のメッセージをこの行に置き換えるだけで、接続がダウンしているという音声フィードバックが得られます。

pingの問題のタイムアウト

ping上記の方法で使用pingすると、接続がダウンしているときに文字通り10〜20秒で障害が発生するまでの時間がかかる可能性があります。このU&L Q&Aへの私の回答を参照してください:コマンドの出力をリダイレクトする方法?fing代わりにコマンドラインツールを使用した例を示します。このツールは、従来のツールよりも速く失敗しますping


ところで、私はbeepコマンドを使用していますが、安全にchown /dev/tty0使用できますsudoか?
Kokizzu 14年

1
@Kokizzu-いいえ、所有権を変更するべきではありません/dev/tty0
slm

1
やったーsox!@Kokizzu -に権限を残す程度SLMの権利/dev/tty0だけでは、デバイスが、あなたが得ることができる疑似端末 /dev/pts/[num]デバイスを-キャラクタデバイスの同じ種類のものxterm例えば各ウィンドウの用途、 -のようなものを持つscreentmux、あるいはssh。これらはマスターデバイスのスレーブデバイス/dev/ptmxであり、ユーザーが所有する/bin/loginプロセスと同じような問題を引き起こさないため、より安全に制御できます。これは、他のケースで発生する可能性があります。
mikeserv 2014年

aplay alert.wavALSAシステムの一部であり、ほとんどのディストリビューションにあらかじめ組み込まれているため、サウンドを再生するためのより標準的な方法です。
Ray Foss

4

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

3
これは機能しますが、のfing代わりに使用することを検討したい場合がありpingます。pingCMD。成功しない場合、少し失敗する可能性があります。fingotherhand上のコマンドは、1秒以内に失敗します。詳細については、このAをこのQ&Aで参照してください:コマンドの出力をリダイレクトする方法?。との両方を使用して表示pingfingます。
slm

@slm、編集ありがとうございます。pingを1秒だけ持続させる方法に混乱しました
Nidal

イーサネットの電源が切れた場合など、すぐに応答する場合、これは毎秒無制限にpingを実行するようです。sleep 1これを防ぐには十分です
Ray Foss
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.