ネットワークの可用性を確認するpingスクリプト

ネットワークの可用性を確認するpingスクリプト

インターネットが利用可能であることを確認するために、4つのホストにpingを送信するddwrt用のスクリプトを作成したいと思います。 4つのテストのいずれかで実際のping結果が出ればインターネットが正常に動作しているとみなし、そうでなければ接続がないことです。これらのテストの1つ以上を実装する必要があります。

これが私が使ったスクリプトです。

#!/bin/sh
result=`ping -c 1 8.8.8.8 | grep -c from`
sleep 10
result+=`ping -c 1 www.google.com | grep -c from` 
# I want the output from this command to add into result variable. For example, if result value is 0 then add the value of next ping command into 0, same with the rest of the commands. Is that possible?
sleep 10
result+=`ping -c 1 www.microsoft.com | grep -c from`
sleep 10
result+=`ping -c 1 www.youtube.com | grep -c from`
if [ $result -ge 1 ] 
then 
echo "Internet alright"
   logger -t 'InternetCheck' 'Internet is Connected'
   logger "ping $result"
else
    logger -t 'InternetCheck' 'After many ping tests, the Internet is not working... will apply solution'
   
   logger "ping $result"
fi

ddwrtにはすでに監視機能が含まれていますが、ルーターを再起動したくありませんが、この時点でコマンドを実行して問題を解決したいと思います。他の提案を教えてください。

あいさつ!

ベストアンサー1

いくつかの考え:

  • ping終了状態 - 応答が受信された場合は0、応答がない場合は0ではありません。 grepの代わりにこれを使用できます。
  • 4つのpingコマンドを並列に実行してwait待つこともできます。これにより、インターネット接続が失われたことを知る前に4回のping失敗を待つ必要がなくなります。
  • あるいは、接続がほとんどの場合に機能している場合は、到達可能なターゲット数はいくつかではなく、接続が機能しているかどうかを知りたいので、最初のpingの成功後に停止できます。

このスクリプト(ロギングエントリを除いて2つのIPに対してのみ機能し、簡単に拡張できます)は、非常に短い時間(スクリプトが少なくとも30秒+ pingタイムアウトの間実行された)の後に答えを提供し、ステータス0の終了に戻ります。 。または、pingが成功したか完全に失敗したかに応じて1です。 -W オプションを使用して短いタイムアウトを設定します。インターネット接続が実際に不安定でない限り、少なくとも1つのアドレスは1秒以内に応答を返す必要があります。

#!/bin/sh
IP1=8.8.8.8
IP2=4.4.4.4

#start first ping, remember its pid
ping -W 1 -c 1 $IP1 >/dev/null&
PID1=$!

# start second ping, remember its pid
ping -W 1 -c 1 $IP2 >/dev/null&
PID2=$!

# wait for pings to finish
if wait $PID1
then echo $IP1 is reachable, internet is working; exit 0
fi

if wait $PID2
then echo $IP2 is reachable, internet is working; exit 0
fi

# none reachable
echo all pings failed, internet is down
exit 1

おすすめ記事