Sprawdzanie dostępności hosta za pomocą skryptów ping w bash
Chcę napisać skrypt, który sprawdzałby, czy którekolwiek z urządzeń w sieci, które powinny być online przez cały dzień, jest naprawdę online. Próbowałem użyć Pinga, ale
if [ "`ping -c 1 some_ip_here`" ]
then
echo 1
else
echo 0
fi
Daje 1
bez względu na to, czy podam poprawny czy nieprawidłowy adres ip. Jak mogę sprawdzić, czy konkretny adres (lub lepiej dowolne urządzenie z listy adresów ip) nie działa w trybie offline?
6 answers
Ping zwraca różne kody zakończenia w zależności od rodzaju błędu.
ping 256.256.256.256 ; echo $?
# 68
ping -c 1 127.0.0.1 ; echo $?
# 0
ping -c 1 192.168.1.5 ; echo $?
# 2
0 oznacza host osiągalny
2 oznacza nieosiągalny
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-22 19:22:57
Nie potrzebujesz backticks w instrukcji if. Możesz użyć tego czeku
if ping -c 1 some_ip_here &> /dev/null
then
echo 1
else
echo 0
fi
Polecenie if sprawdza kod wyjścia następującego polecenia (ping). Jeśli kod zakończenia wynosi zero (co oznacza, że polecenie zakończyło się pomyślnie), blok then zostanie wykonany. Jeśli zwróci niezerowy kod wyjścia, wtedy zostanie wykonany blok else.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-08 10:17:37
Istnieje zaawansowana wersja ping- "fping", która daje możliwość zdefiniowania timeoutu w milisekundach.
#!/bin/bash
IP='192.168.1.1'
fping -c1 -t300 $IP 2>/dev/null 1>/dev/null
if [ "$?" = 0 ]
then
echo "Host found"
else
echo "Host not found"
fi
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-17 15:27:55
/ Align = "left" / ]}
ping -c 1 127.0.0.1 &> /dev/null && echo success || echo fail
Zamień 127.0.0.1 na IP lub nazwę hosta, zamień polecenia echo na to, co należy zrobić w obu przypadkach.
Powyższy kod powiedzie się, może spróbuj z adresem IP lub nazwą hosta, o którym wiesz, że nie jest dostępny.
Tak:
ping -c 1 google.com &> /dev/null && echo success || echo fail
I to
ping -c 1 lolcatz.ninja &> /dev/null && echo success || echo fail
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-15 22:17:02
FYI, Po prostu zrobiłem jakiś test przy użyciu metody powyżej i jeśli używamy multi ping (10 requests)
Ping-c10 8.8.8.8 & >/dev / null ; echo $?
Wynikiem polecenia multi ping będzie "0", jeśli przynajmniej jeden z wyników ping jest osiągalny, i " 1 " w przypadku, gdy wszystkie żądania ping są nieosiągalne.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-03 11:21:20
up=`fping -r 1 $1 `
if [ -z "${up}" ]; then
printf "Host $1 not responding to ping \n"
else
printf "Host $1 responding to ping \n"
fi
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-01 05:52:13