Czy istnieje prosty sposób na sprawdzenie połączenia internetowego z konsoli? Próbuję się bawić w skrypcie powłoki. Wydaje mi się, że jednym z pomysłów jest sprawdzenie kodu odpowiedzi HTTP, aby zinterpretować, czy połączenie internetowe działa poprawnie. Myślę jednak, że musi istnieć prosty sposób bez konieczności sprawdzania witryny, która nigdy się nie zawiesza;)wget --spider http://www.google.co.in/
Edycja: Wydaje się, że może być wiele czynników, które można indywidualnie zbadać, dobrze. W tej chwili zamierzam sprawdzić, czy mój blog nie działa. Mam konfigurację crona, aby sprawdzał to co minutę. W tym celu sprawdzam kod odpowiedzi HTTP wget --spider na moim blogu. Jeśli nie jest to 200, powiadamia mnie (uważam, że to będzie lepsze niż pingowanie, ponieważ strona może być obciążona i może upłynąć limit czasu lub odpowiedzieć bardzo późno). Wczoraj był problem z moim Internetem. Sieć LAN była podłączona dobrze, ale po prostu nie mogłem uzyskać dostępu do żadnej strony. Wciąż otrzymuję powiadomienia, ponieważ skrypt nie może znaleźć 200 w odpowiedzi wget. Teraz chcę się upewnić, że wyświetla mi powiadomienie, gdy mam połączenie z Internetem.
Dlatego sprawdzanie łączności z DNS i LAN jest dla mnie trochę przesadne, ponieważ nie mam tak konkretnej potrzeby, aby dowiedzieć się, na czym polega problem. Więc co sugerujesz, jak to robię?
Oto mój skrypt do sprawdzania przestojów mojego bloga:
#!/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
W ten sposób muszę sprawdzić łączność z Internetem tylko tam, gdzie występuje problem z kodem odpowiedzi mojego bloga. Jest trochę ciężki (ponieważ nie używam pinga), ale nie powinien dawać żadnych fałszywych alarmów. Dobrze? Również w jaki sposób mogę za każdym razem losować pingowanie do innej witryny, np. Facebook, Google, Yahoo itp. Ponadto (starałem się unikać jakichkolwiek operacji we / wy) mogę zapisać plik dziennika, dzięki któremu mogę sprawdzić liczbę kontroli przestojów i następnie pomiń kolejne kontrole, dopóki witryna nie będzie działała lub spowoduj dłuższe kontrole (10 minut zamiast co minutę). Co myślisz?
źródło
Odpowiedzi:
Sprawdzanie, czy konkretna strona internetowa działa
Po pierwsze, dostępnych jest wiele dobrych usług monitorowania online. Aby wybrać jeden, Pingdom zawiera darmowe konto do monitorowania jednego celu. (Oświadczenie: W żaden sposób nie jestem powiązany z Pingdom).
Po drugie,
wget --spider
dobrym pomysłem jest użycie własnego skryptu. Pojawią się fałszywe alarmy, gdy komputer będzie wyłączony lub gdy serwer DNS nie będzie działał. Sprawdzanie kodu powrotu jest prostym sposobem na wykonanie tego:Po raz kolejny w tym podejściu występują niedociągnięcia. Jeśli Twój dostawca buforował Twój rekord DNS, ale serwer DNS nie działa, inni nie mogą uzyskać dostępu do Twojej witryny, mimo że monitorowanie mówi, że wszystko jest w porządku. Możesz
host
na przykład napisać krótkie obejście tego problemuhost example.com <your dns server IP>
. To zwróci błąd, jeśli serwer DNS nie odpowiada, nawet jeśli OpenDNS lub serwer DNS twojego dostawcy działa dobrze.Sprawdzanie, czy działa internet
W każdym przypadku nie jest to naprawdę łatwy sposób.
Możesz na przykład uruchamiać
ping -c1
w wielu dobrze znanych witrynach (na przykład www.google.com, facebook.com i ping.funet.fi) i sprawdzać kody powrotu, aby ustalić, czy można dotrzeć do dowolnego miejsca docelowego. Możesz automatycznie sprawdzić kod powrotu za pomocą zmiennej$?
. Parametr-c1
ogranicza liczbę pakietów ping do jednego.Możesz napotkać problemy z niektórymi publicznymi wifis, gdy istnieje brama logowania, która przekierowuje wszystkie pingi i żądania HTTP. Jeśli tak, możesz otrzymać odpowiedzi ping i bezbłędne kody stanu HTTP, nawet jeśli nie możesz uzyskać dostępu do innych witryn.
Jeśli chcesz sprawdzić stan kabla, możesz użyć
Z wyników (fragment):
Jednak nie mówi to, czy naprawdę masz łączność, czy nie, tylko to, czy kabel jest podłączony i coś jest na drugim końcu.
źródło
host
(zapytanie DNS). Jest również bardzo szybki.Używam tej metody ...
źródło
ping -c 1 8.8.8.8
iping -c 1 www.google.com
. W jaki sposób?Właśnie użyłem
który zatrzymuje się, aż menedżer sieci utworzy połączenie sieciowe. Działało dobrze. Możesz także robić inne rzeczy.
źródło
Sprawdzanie, czy witryna jest uruchomiona, zwykle odbywa się za pomocą narzędzia do monitorowania, takiego jak
nagios
. Będzie to stale monitorować witrynę i może powiadamiać o awariach.Podczas sprawdzania, czy Internet jest uruchomiony z linii poleceń, wykonuję kilka kroków:
ping google.com
(sprawdza DNS i znaną dostępną stronę).wget
lubw3m
pobierz stronę.Jeśli Internet nie działa, zdiagnozuj go na zewnątrz.
Jeśli Internet działa, ale witryna nie działa,
w3m http://isup.me/example.com
zastąpexample.com
ją witryną, która pojawia się w dół. Użyj wget, lynx lub dowolnej przeglądarki wiersza poleceń, którą masz dostępną, jeśli nie masz zainstalowanej przeglądarki w3m.źródło
if ! wget --spider http:///example.com; then
.[ $? != 0 ]
jest taki sam jak test! command
. Wget jest udokumentowany, aby zwracał 0 w przypadku sukcesu, a nie 0 w przypadku niepowodzenia. If zachowuje się tak samo, niezależnie od tego, w jaki sposób go kodujesz. Jeśli wget zwróci błąd przy odpowiedzi 200, test zakończy się niepowodzeniem w obu przypadkach. To samo, jeśli zwraca 0 dla kodu odpowiedzi innego niż 200.Oto skrypt powłoki, którego używam do testowania łączności z Internetem:
alarm.sh
Musisz zainstalować curl i mpg321
Będziesz potrzebował pliku dźwiękowego .mp3 o zmienionej nazwie na alarm.mp3 w tym samym folderze, jeśli chcesz mieć funkcję alarmu dźwiękowego. Na koniec skonfiguruj adres URL strony i egrep do swoich potrzeb.
źródło
egrep -q
zamiastegrep ... > /dev/null
while
pętli?alarm.sh
w wd, więc jeśli wywołasz ten skrypt z innego katalogu, to albo wystąpi błąd, albo jeśli jest skrypt wywoływanyalarm.sh
w wd, wywoła to zamiast tego. To zła praktyka. Możesz użyć"$0"
zamiast tego, alewhile
pętla byłaby lepsza.Sprawdzanie, czy działa internet
Z wyników (fragment):
Jednak, jak wspominają inni, nie mówi to, czy naprawdę masz łączność, czy nie. Na przykład. Możesz być podłączony do routera, a router niekoniecznie musi być podłączony do Internetu.
źródło
nm-tool
został usunięty z Ubuntu 15.04+, ale możesz go użyćnmcli
. Np.[[ $(nmcli -f STATE -t g) = connected ]]
nmcli -f STATE -t nm
dobrą rzeczą jest niezależność od stron internetowych!nm-tool
inmcli
powie ci tylko, czy jesteś podłączony do sieci lokalnej , tj. Czy masz połączenie z domowym Wi-Fi / Ethernet. Nie powie ci, czy możesz dotrzeć do czegokolwiek poza siecią lokalną, np. Do Internetu.Korzystam z tej metody:
Spróbuje połączyć się ze znaną witryną, a jeśli będzie mógł się z nią połączyć, zakładamy, że jest internet.
źródło
Potrzebowałem pomocy z tym samym pytaniem i otrzymałem odpowiedź w ten sposób:
źródło
nm-online
polecenia ... Zwróci 0, jeśli wszystko będzie w porządku. Zwykle we wszystkichUNIX
muszlach.Sprawdzenie, czy Internet działa, nie jest takie proste. ping to ICMP, więc może działać, nawet jeśli serwer proxy sieci Web jest wyłączony. Coś podobnego dzieje się z DNS, jeśli testujesz z IP.
Ponieważ moje połączenie internetowe jest niestabilne, stworzyłem ten skrypt ( oparty na tym ), który wydaje delikatny akord, aby do mnie zadzwonić, a także używa powiadomienia Ubuntu o powrocie połączenia internetowego:
źródło
Szukałem skryptu, który nieustannie testowałby moje połączenie internetowe, który byłby uruchamiany za każdym razem, gdy mój serwer był uruchomiony i zrobiłem to:
Najpierw zainstaluj fping
Utwórz skrypt init w folderze /etc/init.d z następującą zawartością (nazwałem to testcon)
Utwórz skrypt w folderze /etc/init.d o następującej treści (nazwałem go testcond)
Następnie uruchamiam poniższe polecenia, aby dodać do uruchamiania:
Restart
źródło
Mój
Broadcom BCM94331CD
układ scalony napotkał przypadkowe zerwanie połączeń Wi-Fi . Opracowałem następujący skrypt bash (nieskończona pętla) sprawdzający co sekundę, czy połączenie internetowe Wi-Fi jest uruchomione. Inna proponowana tutaj linia poleceń będzie czekać co najmniej 5 do 10 sekund przed zamknięciem ze statusem tjping
. Tymczasem szukam też ostatecznego rozwiązania.Z wyników na askubuntu będę musiał wyczyścić
bcmwl-kernel-source
pakiet podczas używaniafirmware-b43-installer
ib43-fwcutter
.Dziękujemy wszystkim za sugestie (powyżej).
Skrypt ten należy dodać w programach startowych i nie wymaga on również
super user
uprawnień do uruchamiania.źródło