コンソールからインターネット接続を確認する簡単な方法はありますか?シェルスクリプトで遊んでいます。インターネット接続が正常に機能しているかどうかを解釈するには、wget --spider http://www.google.co.in/
とHTTP応答コードを確認することです。しかし、クラッシュしないサイトをチェックする必要がない簡単な方法があるはずだと思います;)
編集:個別に調査できる多くの要因があるように思えますが、良いことです。現時点での私の意図は、ブログがダウンしているかどうかを確認することです。毎分チェックするためにcronをセットアップしています。このために、ブログのwget --spiderのHTTP応答コードを確認しています。 200ではない場合、通知されます(サイトに負荷がかかり、タイムアウトするか、応答が非常に遅くなる可能性があるため、pingするよりも良いと考えています)。昨日、インターネットに問題がありました。 LANは正常に接続されましたが、サイトにアクセスできませんでした。スクリプトがwget応答で200を検出できなかったため、引き続き通知を取得します。ここで、インターネットに接続しているときに通知が表示されるようにします。
したがって、DNSとLANの接続を確認することは、それがどのような問題であるかを特定する必要があまりないので、少しやり過ぎです。それで、私はそれをどうやってやるのですか?
ブログのダウンタイムをチェックし続けるためのスクリプトを次に示します。
#!/bin/bash
# Sending the output of the wget in a variable and not what wget fetches
RESULT=`wget --spider http://blog.ashfame.com 2>&1`
FLAG=0
# Traverse the string considering it as an array of words
for x in $RESULT; do
if [ "$x" = '200' ]; then
FLAG=1 # This means all good
fi
done
if [ $FLAG -eq '0' ]; then
# A good point is to check if the internet is working or not
# Check if we have internet connectivity by some other site
RESULT=`wget --spider http://www.facebook.com 2>&1`
for x in $RESULT; do
if [ "$x" = '200' ]; then
FLAG=1 # This means we do have internet connectivity and the blog is actually down
fi
done
if [ $FLAG -eq '1' ]; then
DISPLAY=:0 notify-send -t 2000 -i /home/ashfame/Dropbox/Ubuntu/icons/network-idle.png "Downtime Alert!" "http://blog.ashfame.com/ is down."
fi
fi
exit
この方法では、ブログの応答コードに問題がある場合にのみ、インターネット接続を確認する必要があります。 (pingを使用していないので)少し重いですが、誤検出はありません。右?また、facebook、google、yahooなどのように、毎回異なるサイトへのpingをランダム化する方法もあります。その後、サイトが停止するか、より長いチェックが発生するまで(毎分ではなく10分)、さらにチェックをスキップします。どう思いますか?
まず、複数の優れたオンライン監視サービスが利用可能です。 1つを選択するために、Pingdomには1つのターゲットを監視するための無料アカウントが含まれています。 (免責事項:私はnot Pingdomと提携しています).
次に、独自のスクリプトにwget --spider
を使用することをお勧めします。コンピューターがダウンしているとき、またはDNSサーバーが機能していないときに、誤検知が発生します。リターンコードの確認は、これを実装するための簡単な方法です。
wget --spider --quiet http://example.com
if [ "$?" != 0 ]; then
echo "Website failed!" | mail -s "Website down" [email protected]
fi
さらに、このアプローチには欠点があります。プロバイダーがDNSレコードをキャッシュしているが、DNSサーバーがダウンしている場合、監視によりすべてが正常であると言われても、他のユーザーはサイトにアクセスできません。 Host
を使用して、たとえばHost example.com <your dns server IP>
などの簡単な回避策を作成できます。 DNSサーバーが応答しない場合は、OpenDNSまたは独自のプロバイダーのDNSサーバーが正常に機能していても、エラーが返されます。
あらゆる場合にこれを処理する簡単な方法はありません。
たとえば、よく知られている複数のサイト(www.google.com、facebook.com、ping.funet.fiなど)でping -c1
を実行し、リターンコードをチェックして、到達可能な宛先があるかどうかを判断できます。変数$?
を使用して、戻りコードを自動的に確認できます。パラメーター-c1
は、pingパケットの数を1つに制限しています。
すべてのpingおよびHTTP要求をリダイレクトするログインゲートウェイがある場合、一部のパブリックwifiで問題が発生する可能性があります。その場合、他のサイトにアクセスできない場合でも、ping応答とエラー以外のHTTPステータスコードを受け取ることがあります。
ケーブルの状態を確認する場合は、次を使用できます。
Sudo ethtool eth0
出力から(抜粋):
Speed: 1000Mb/s
Duplex: Full
Port: Twisted Pair
Link detected: yes
ただし、これは実際に接続があるかどうかではなく、ケーブルが接続されており、somethingがもう一方の端にあるかどうかだけを示しています。
使ったばかり
nm-online
ネットワーク管理者がネットワーク接続を確立するまで一時停止します。うまくいった。他のこともできます。
私はこの方法を使用しています...
if [["$(ping -c 1 8.8.8.8 | grep '100%packet loss')"!= ""]]; then echo "インターネットが存在しません" exit 1 else echo "インターネットが存在します" wget www.site.com fi
通常、サイトが稼働しているかどうかの確認は、nagios
などの監視ツールを使用して行われます。これにより、サイトが継続的に監視され、停止が通知されます。
コマンドラインからインターネットが起動しているかどうかを確認するとき、いくつかの手順を実行します。
ping google.com
(DNSと既知の到達可能なサイトを確認します)。wget
またはw3m
を使用してページを取得します。インターネットが稼働していない場合は、外側を診断します。
インターネットが稼働しているがサイトがダウンしている場合は、w3m http://isup.me/example.com
をexample.com
をダウンしているサイトに置き換えて確認してください。 wget、lynx、またはw3mブラウザーがインストールされていない場合に使用可能なコマンドラインブラウザーを使用します。
これは、インターネット接続のテストに使用しているシェルsrcriptです。
alarm.sh
#! /bin/bash
if curl --silent --head http://www.google.com/ |
egrep "20[0-9] Found|30[0-9] Found" >/dev/null
then
echo Internet status: OK
else
echo Internet status: ERROR
mpg321 alarm.mp3 &> /dev/null
fi
sleep 60
clear
./alarm.sh
Curlとmpg321をインストールする必要があります
Sudo apt-get install curl mpg321
可聴アラーム機能が必要な場合は、同じフォルダ内でalarm.mp3に名前を変更した.mp3サウンドファイルが必要です。最後に、必要に応じてWebサイトのURLとegrepを構成します。
Sudo nm-tool | grep "State: connected" | wc -l
出力から(抜粋):
1 #System is connected to internet
ただし、他の人が述べたように、これは本当に接続性があるかどうかを伝えるものではありません。例えば。ルーターに接続でき、ルーターは必ずしもインターネットに接続されているとは限りません。
私はこの方法を使用しています:
if curl -s --head --request GET www.google.com | grep "200 OK" > /dev/null ; then
echo "Internet is present"
else
echo "Internet isn't present"
fi
有名なWebサイトに接続しようとします。接続できる場合は、インターネットがあると想定します。
私は、インターネット接続を継続的にテストするスクリプトを探していました。これは、サーバーが起動するたびに開始され、これを作成しました。
まず、fpingをインストールします
apt-get install fping
/etc/init.dフォルダーに次の内容のinitスクリプトを作成します(testconと呼びます)。
#!/bin/bash
PIDFILE=/var/run/testcon.pid
. /lib/lsb/init-functions
case "$1" in
start)
log_daemon_msg "Starting internet connection tester"
/etc/init.d/testcond &
echo $! > $PIDFILE
log_end_msg $?
;;
stop)
log_daemon_msg "Stopping internet connection tester"
PID=$(cat $PIDFILE)
kill -9 "$PID"
log_end_msg $?
;;
*)
echo "Usage: /etc/init.d/testcon {start|stop}"
exit 1
;;
esac
exit 0
/etc/init.dフォルダーに次の内容のスクリプトを作成します(testcondと呼びます)。
#echo Computer starting or testing daemon init
while [ "$itest" == "" ]
do
#wait 5 seconds
sleep 5
itest=$(fping 8.8.8.8 | grep alive)
done
date | mail -s "Server is up and Internet is online" [email protected]
#loop forever
while [ "1" == "1" ]
do
itest=$(fping 8.8.8.8 | grep alive)
#if internet is down
if [ "$itest" == "" ]
then
#echo Internet is down
#log time it was found down
current_time=$(date)
echo "Internet was found down @ $current_time" >> /mnt/data/Server/internet_log.txt
#loop until it is back
while [ "$itest" == "" ]
do
#wait 60 seconds
sleep 60
itest=$(fping 8.8.8.8 | grep alive) # test the internet
done
#when it is back
current_time=$(date)
echo "Internet is back @ $current_time" >> /mnt/data/Server/internet_log.txt
body=$(tail -2 /mnt/data/Server/internet_log.txt)
echo "$body" | mail -s "Internet is back online" [email protected]
fi
#echo Internet is online
#wait 60 seconds
sleep 60
done
次に、以下のコマンドを実行して、スタートアップに追加します。
Sudo update-rc.d testcon defaults
Sudo update-rc.d testcon enable
リブート
私は同じ質問で助けが必要でした、そして、私はこの方法で私の答えを得ました:
echo $(nm-online) $? connection problems
インターネットが機能しているかどうかを確認することはそれほど簡単ではありません。 pingはICMPであるため、Webプロキシがダウンしていても機能する場合があります。 IPでテストすると、DNSでも同様のことが起こります。
私のインターネット接続は不安定なので、私はこのスクリプトを作成しました( これに基づいて )優しいコード音で私を呼び出し、またインターネット接続が戻ったときにUbuntu通知を使用します:
#!/bin/bash
hash play 2>&- || { echo >&2 "I require «play» but it's not installed. Try apt-get install sox. Aborting."; exit 1; }
WGET="`which wget`"
URL="http://www.google.com"
delay=3;
noConnectionMessage="No connection, trying again in $delay seconds...";
connectionMessage="WE HAVE INTERNET! :) Trying again in $delay seconds...";
echo "INTERNET TESTER: Type Ctrl+C to quit";
rm --force /tmp/index.site
function playSound {
time=1; # Time played
if [ `sox --version| grep -oP "v[0-9.]+" | sed "s/[v.]//g"` -lt 1431 ]; then #analize sox version, if greater than v14.3.1 can use pluck
play -q -n synth $time sine;
else
play -q -n synth $time pluck $1;
#for i in G4 G4 G4 E4;do play -n synth 0.1 pluck $i repeat 2;done # You can play with something like this also :) (first three notes from Beethoven 5th symphony)
fi
}
while [ 1 -eq 1 ]; do
$WGET -q --tries=10 --timeout=2 $URL -O /tmp/index.site &> /dev/null
if [ ! -s /tmp/index.site ];then
echo $noConnectionMessage;
#playSound E2
sleep 1;
else
#~ zenity --warning --text "ADDRESS is back"
notify-send -i "notification-network-wireless-full" "Connection state:" "$connectionMessage";
echo $connectionMessage;
playSound E3
fi
sleep $delay;
done
exit 0;
Broadcom BCM94331CD
チップによるWi-Fi接続のランダムなドロップに直面しました。インターネットWi-Fi接続が稼働中であるかどうかを毎秒チェックする次のbashスクリプト(無限ループ)を考案しました。ここで提案されている他のコマンドラインは、少なくとも5〜10秒待ってから、ステータス[ping
]で閉じます。それまでの間、私は最終的な解決策も探しています。
Askubuntuの結果から、bcmwl-kernel-source
およびfirmware-b43-installer
を使用するときに、b43-fwcutter
パッケージを削除する必要があります。
提案をありがとう(上記)。
このスクリプトは、スタートアッププログラムに追加する必要があり、super user
特権も実行する必要はありません。
#!/bin/bash
#
# Check if Wi-Fi is disabled e.g. 'out of range'
# If so quickly re-enable Wi-Fi
# Due to a problem with Broadcom proprietary driver in package firmware-b43-installer
# Script is part of Start-Up programs
# Stored in /usr/local/bin/
# Infinite loop checking every second if Wi-Fi is up and running
while true; do
# https://askubuntu.com/questions/27954/how-can-i-check-internet-connectivity-in-a-console
if [[ $(nmcli -f STATE -t g) != 'connected' ]]; then
# Disable and Re-Enable Wi-Fi as the Wi-Fi is now 'out of range' (disconnected)
nmcli radio wifi off
nmcli radio wifi on
fi
sleep 1
done