Mam 10 numerów IP, które muszę codziennie pingować w celu sprawdzenia, jak mogę to zrobić za pomocą skryptu BASH. Tak, że mogę zautomatyzować to zadanie za pomocą crona. Chcę tylko skrypt BASH.
Poniżej odpowiedzi wspomniałem o adresach IP Google, Yahoo, MSN itp. Próbowałem tego sam. Wstawianie {} i nie działają tutaj między adresami IP, aby je rozdzielić. mam nadzieję, że może komuś pomóc w przyszłości. Dziękuję za przeczytanie.
rɑːdʒɑ
Odpowiedzi:
18
Ponieważ twój zakres ip nie ma symetrii i jest tylko 10 węzłów, sugerowałbym umieszczenie ich w pliku tekstowym. Rozważam, że plik zawierający listę list.txtzawiera listę adresów IP po jednym w każdej linii, jak pokazano poniżej,
wydaje się to dokładnie tym, czego OP powinien szukać ... a ponieważ strony takie jak google.com, yahoo.com itp. używają wielu serwerów do obsługi żądań, lepiej byłoby pingować je za pomocą ich nazw domen (abyś prawdopodobnie nie muszę zmienić adres IP na twojej liście pingów w nadchodzącym tygodniu) ..
dokładnie
Działa świetnie, opublikowałem nieco zmodyfikowaną odpowiedź, której używam w środowisku Travis CI.
MitchellK
2
#!/bin/bashwhile read hostname
do
ping -c 1-t 1"$hostname">/dev/null 2>&1&&
echo "Ping Status of $hostname : Success"||
echo "Ping Status of $hostname : Failed"done< host.txt
#!/bin/bashfor i in`seq ${2} ${3}`do
ping -c 1 ${1}.${i}>/dev/null 2>&1if[ $?-eq 0];then
echo "${1}.${i} responded."else
echo "${1}.${i} did not respond."fidone
Aby uruchomić ./script 192.168.1 0 10, na przykład spowoduje to uruchomienie ips 192.168.1.0 do 192.168.1.10 i echo odpowie, jeśli ping jest w porządku, a nie odpowie, jeśli nie.
NB: Możesz zastąpić 1 $ 2 $ 3 $ zmiennymi statycznymi, jeśli zakres i adresy IP są zawsze takie same.
IP nie są z tego samego zakresu. takie są kryteria. w jakikolwiek sposób dzięki za odpowiedź. + 1
rɑːdʒɑ
ok, proszę podać to w swoim pytaniu. Dzięki za +
Maythux,
Zgrabny i prosty skrypt, który może być bardzo przydatny (np. Na urządzeniach osadzonych), nawet jeśli nie spełnia w 100% warunków pytania. Dzięki Ci. +1 zasłużone.
Sopalajo de Arrierez
1
Załóżmy, że masz 5 adresów IP (tylko w celu zmniejszenia odpowiedzi), a następnie możesz je pingować
#!/usr/bin/bash for i in xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx xxx.xxx.xxx.xxxx
do
ping -c 5 $i
done
Uwaga: Bez nawiasów klamrowych, bez przecinków (,) między adresami IP.
Mam nadzieję, że to pomaga.
Dawny:
[raja @ scripts]$ cat ping.sh
for i in74.125.236.7098.139.183.2465.55.206.22891.189.94.156198.252.206.24do
ping -c 5 $i
done[raja @ scripts]$ ./ping.sh
PING 74.125.236.70(74.125.236.70)56(84) bytes of data.64 bytes from 74.125.236.70: icmp_seq=1 ttl=128 time=11.5 ms
64 bytes from 74.125.236.70: icmp_seq=2 ttl=128 time=11.0 ms
64 bytes from 74.125.236.70: icmp_seq=3 ttl=128 time=10.9 ms
64 bytes from 74.125.236.70: icmp_seq=4 ttl=128 time=16.5 ms
64 bytes from 74.125.236.70: icmp_seq=5 ttl=128 time=18.2 ms
---74.125.236.70 ping statistics ---5 packets transmitted,5 received,0% packet loss, time 4025ms
rtt min/avg/max/mdev =10.966/13.682/18.291/3.120 ms
PING 98.139.183.24(98.139.183.24)56(84) bytes of data.64 bytes from 98.139.183.24: icmp_seq=1 ttl=128 time=244 ms
64 bytes from 98.139.183.24: icmp_seq=2 ttl=128 time=253 ms
64 bytes from 98.139.183.24: icmp_seq=3 ttl=128 time=255 ms
64 bytes from 98.139.183.24: icmp_seq=4 ttl=128 time=251 ms
64 bytes from 98.139.183.24: icmp_seq=5 ttl=128 time=243 ms
---98.139.183.24 ping statistics ---5 packets transmitted,5 received,0% packet loss, time 4251ms
rtt min/avg/max/mdev =243.511/249.623/255.275/4.674 ms
PING 65.55.206.228(65.55.206.228)56(84) bytes of data.From10.22.96.94 icmp_seq=5Packet filtered
---65.55.206.228 ping statistics ---5 packets transmitted,0 received,+1 errors,100% packet loss, time 14002ms
PING 91.189.94.156(91.189.94.156)56(84) bytes of data.64 bytes from 91.189.94.156: icmp_seq=1 ttl=128 time=240 ms
64 bytes from 91.189.94.156: icmp_seq=2 ttl=128 time=240 ms
64 bytes from 91.189.94.156: icmp_seq=3 ttl=128 time=240 ms
64 bytes from 91.189.94.156: icmp_seq=4 ttl=128 time=240 ms
64 bytes from 91.189.94.156: icmp_seq=5 ttl=128 time=240 ms
---91.189.94.156 ping statistics ---5 packets transmitted,5 received,0% packet loss, time 4242ms
rtt min/avg/max/mdev =240.060/240.222/240.309/0.626 ms
PING 198.252.206.24(198.252.206.24)56(84) bytes of data.64 bytes from 198.252.206.24: icmp_seq=1 ttl=128 time=237 ms
64 bytes from 198.252.206.24: icmp_seq=2 ttl=128 time=237 ms
64 bytes from 198.252.206.24: icmp_seq=3 ttl=128 time=237 ms
64 bytes from 198.252.206.24: icmp_seq=4 ttl=128 time=237 ms
64 bytes from 198.252.206.24: icmp_seq=5 ttl=128 time=242 ms
---198.252.206.24 ping statistics ---5 packets transmitted,5 received,0% packet loss, time 4251ms
rtt min/avg/max/mdev =237.600/238.575/242.291/1.933 ms
nie pokazałeś implementacji z cronem, jak wspomniano w swoim Q .. także, w jaki sposób ten skrypt powiadomiłby wynik żądania ping.
dokładnie
Wspomniałem, że chcę tylko skrypt. Cron nie jest częścią pytania. Cron wspomniał, dlaczego potrzebuję tego skryptu, i wspomniał o celu tego skryptu jako zadania crona.
rɑːdʒɑ
@ Hash Wypróbuj, zanim zapytasz mojego drogiego przyjaciela. Dziękuję za uwagę.
rɑːdʒɑ
Nigdy nie mówiłem, że skrypt nie będzie działał ... ale jak wspominasz w Q cron, praca będzie wymagała sposobu powiadomienia użytkownika o wyniku pracy, czy sugerujesz coś innego?
dokładnie
moim celem jest praca crona, mam na myśli, dlaczego potrzebuję tego skryptu BASH. ale moim wymaganiem jest bash @ hash
Odpowiedzi:
Ponieważ twój zakres ip nie ma symetrii i jest tylko 10 węzłów, sugerowałbym umieszczenie ich w pliku tekstowym. Rozważam, że plik zawierający listę
list.txt
zawiera listę adresów IP po jednym w każdej linii, jak pokazano poniżej,Możesz użyć tego skryptu,
Aby zaktualizować status działania swoich węzłów w odstępie 30 minut, użyj w crontab,
Wyjście log.txt
źródło
$ cat host.txt
Zobacz:
http://www.thelinuxtips.com/2012/06/shell-script-to-ping-multiple-hosts/
źródło
Sprawdź ten skrypt.
Aby uruchomić ./script 192.168.1 0 10, na przykład spowoduje to uruchomienie ips 192.168.1.0 do 192.168.1.10 i echo odpowie, jeśli ping jest w porządku, a nie odpowie, jeśli nie.
NB: Możesz zastąpić 1 $ 2 $ 3 $ zmiennymi statycznymi, jeśli zakres i adresy IP są zawsze takie same.
źródło
Załóżmy, że masz 5 adresów IP (tylko w celu zmniejszenia odpowiedzi), a następnie możesz je pingować
Uwaga: Bez nawiasów klamrowych, bez przecinków (,) między adresami IP.
Mam nadzieję, że to pomaga.
Dawny:
źródło
cron
, praca będzie wymagała sposobu powiadomienia użytkownika o wyniku pracy, czy sugerujesz coś innego?lub z grep, zobacz tylko węzły inne niż ping
źródło
Dobrze
To proste: użyj
parallel --gnu
polecenia, a następnie polecenia.Pobierz przykładowe adresy IP:
źródło