19

私の学校では、インターネットが利用できません (毎晩 23:00 以降、学校は私たちを寝かしつけるためにインターネット接続を切断します >..<)。その後、パラメータを使用しましたが、ping は決して停止しませんping -w1 ...

つまりping -q -w1 -c1 8.8.8.8、インターネット接続がアップ/ダウンしているかどうかを確認するために: を使用すると、単一のcat.

なぜそうなのかはわかりませんが、問題はschool-internet-service に関連していると思います。なにか提案を?wget(良い代替手段だと思いますが、どうすれば使用できますか?)

4

10 に答える 10

4

使用する:

#!/bin/bash

INTERNET_STATUS="UNKNOWN"
TIMESTAMP=`date +%s`
while [ 1 ]
 do
    ping -c 1 -W 0.7 8.8.4.4 > /dev/null 2>&1
    if [ $? -eq 0 ] ; then
        if [ "$INTERNET_STATUS" != "UP" ]; then
            echo "UP   `date +%Y-%m-%dT%H:%M:%S%Z` $((`date +%s`-$TIMESTAMP))";
            INTERNET_STATUS="UP"
        fi
    else
        if [ "$INTERNET_STATUS" = "UP" ]; then
            echo "DOWN `date +%Y-%m-%dT%H:%M:%S%Z` $((`date +%s`-$TIMESTAMP))";
            INTERNET_STATUS="DOWN"
        fi
    fi
    sleep 1
 done;

出力は次のようになります。

./internet_check.sh

UP   2016-05-10T23:23:06BST 4
DOWN 2016-05-10T23:23:25BST 19
UP   2016-05-10T23:23:32BST 7

行末の数字は、前の状態の継続時間を示します。つまり、19 秒アップ、7 秒ダウンです。

于 2016-05-10T21:43:04.630 に答える
2

上記の例を使用します。接続の状態をログに記録するために、このスクリプトを作成しました: https://gist.github.com/cganterh/ffc2fffa8263857cbece

まず、次のコードをname.shファイルに保存します。

#!/bin/bash

while true
do
    wget -q --tries=10 --timeout=20 -O - http://google.com > /dev/null
    if [[ $? -eq 0 ]]; then
        echo $(date) "1" | tee -a log.csv
    else
        echo $(date) "0" | tee -a log.csv
    fi
    sleep 5
done

次に、name.shターミナルでファイルを実行しlog.csv、同じフォルダーのログ状態情報を確認します。

于 2014-06-16T20:30:06.227 に答える
2

wgetなし

#!/bin/bash

echo -e "GET http://google.com HTTP/1.0\n\n" | nc google.com 80 > /dev/null 2>&1

if [ $? -eq 0 ]; then
    echo "Online"
else
    echo "Offline"
fi

楽しみ ;)

于 2015-07-14T20:08:53.140 に答える
2

fping をインストール: > pingよりも問題が少ない。

fping google.com | grep alive

たとえば、次のように使用します。

#!/bin/bash

itest=$(fping google.com | grep alive)

while [ "$itest" == "" ]
        do
        sleep 5
        itest=$(fping google.com | grep alive)
done
echo now online
于 2014-01-06T11:12:03.790 に答える
2

タイムアウト オプションを使用します-t

ping -q -t 5 -w1 -c1 8.8.8.8 t
于 2013-06-25T07:14:21.430 に答える
0

ping別の Bash スクリプトで信頼できる古い:

#!/bin/bash
ipaddr='8.8.8.8' # Google's public DNS server
[[ -z `ping -c1 $ipaddr |& grep -o 'Network is unreachable'` ]] || exit 1
[[ -z `ping -c3 $ipaddr |& grep -o '100% packet loss'` ]] && exit 0 || exit 1

これを別のスクリプトに入れます。(1) ネットワークに接続していない、(2) ネットワークに接続しているがインターネット (または少なくとも Google) にアクセスできない、(3) インターネットに接続している、などのさまざまなネットワーク状況を処理します。


後でexit codeスクリプトの を使用して、接続を確認できます。

~$ script-name && echo online || echo offline
于 2016-09-05T01:52:45.840 に答える