Ich habe 10 IP-Nummern, die ich täglich anpingen muss, um zu überprüfen, wie ich das mit BASH-Skript machen kann. Damit ich diese Aufgabe mit cron automatisieren kann. Ich möchte nur BASH-Skript.
Unter Antwort habe ich IPs von Google, Yahoo, MSN usw. erwähnt. Ich habe das selbst versucht. Das Einfügen von {} und, funktioniert hier nicht zwischen IPs, um sie zu trennen. hoffe, es kann jemand in Zukunft helfen. Danke fürs Lesen.
Donnerstag,
Antworten:
18
Da Ihr IP-Bereich keine Symmetrie aufweist und es nur 10 Knoten gibt, würde ich vorschlagen, sie in einer Textdatei aufzulisten. Ich denke, dass die Datei, die die Liste list.txtenthält, die Liste von IP eins in jeder Zeile enthält, wie unten gezeigt,
Dies scheint genau das zu sein, wonach OP suchen sollte. Da Websites wie google.com, yahoo.com usw. mehrere Server zur Bearbeitung von Anfragen verwenden, ist es besser, sie mit ihren Domain-Namen zu pingen (damit Sie dies möglicherweise nicht tun) muss die IP in deiner Ping-Liste in der kommenden Woche ändern) ..
präzise
Funktioniert hervorragend, ich habe eine leicht geänderte Antwort gepostet, die ich in einer Travis CI-Umgebung verwende.
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
Um beispielsweise ./script 192.168.1 0 10 auszuführen, werden die IPS 192.168.1.0 bis 192.168.1.10 überprüft, und das Echo hat geantwortet, wenn Ping in Ordnung ist, und wenn nicht, hat es nicht geantwortet.
NB: Sie können $ 1 $ 2 $ 3 durch statische Variablen ersetzen, wenn der Bereich und die IPs immer gleich sind.
IP sind nicht aus dem gleichen Bereich. Das ist das Kriterium dahinter. auf jeden Fall danke für die Antwort. + 1
Freitag,
ok bitte gib das in deiner frage an. Vielen Dank für +
Maythux
Ein ordentliches und einfaches Skript, das sehr nützlich sein kann (z. B. auf eingebetteten Geräten), auch wenn es die Bedingungen der Frage nicht zu 100% erfüllt. Danke. +1 verdient.
Sopalajo de Arrierez
1
Angenommen, Sie haben 5 IPs (um nur die Antwort zu reduzieren), dann können Sie sie mit pingen
#!/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
Hinweis: Keine runden Klammern, keine Kommas (,) zwischen IPs.
Ich hoffe, das hilft.
Ex:
[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
Sie zeigte nicht die Umsetzung mit cron wie in Ihrem Q erwähnt .. auch , wie das Skript das Ergebnis der Ping - Anfragen .. mitteilen würde
genau
Ich habe erwähnt, dass ich nur Drehbuch will. Cron ist nicht Teil der Frage. Cron hat erwähnt, warum ich dieses Skript brauche und um den Zweck dieses Skripts als Cron-Job zu erwähnen.
Donnerstag,
@hash Probieren Sie es aus, bevor Sie meinen lieben Freund fragen. Vielen Dank, dass Sie nachgeschaut haben.
Donnerstag,
Ich habe nie gesagt, dass das Skript nicht funktionieren wird. Aber wenn Sie den cronJob erwähnen , ist ein Mittel erforderlich, um den Benutzer über das Ergebnis des Jobs zu informieren, oder schlagen Sie etwas anderes vor?
genaue
Mein Zweck ist Cron Job, ich meine, warum ich dieses BASH-Skript brauche. Aber meine Anforderung ist bash @hash
Antworten:
Da Ihr IP-Bereich keine Symmetrie aufweist und es nur 10 Knoten gibt, würde ich vorschlagen, sie in einer Textdatei aufzulisten. Ich denke, dass die Datei, die die Liste
list.txt
enthält, die Liste von IP eins in jeder Zeile enthält, wie unten gezeigt,Sie können dieses Skript verwenden,
Um den Betriebsstatus Ihrer Knoten in einem Intervall von 30 Minuten zu aktualisieren, verwenden Sie crontab,
Ausgabe von log.txt
quelle
$ cat host.txt
Siehe:
http://www.thelinuxtips.com/2012/06/shell-script-to-ping-multiple-hosts/
quelle
Überprüfen Sie dieses Skript.
Um beispielsweise ./script 192.168.1 0 10 auszuführen, werden die IPS 192.168.1.0 bis 192.168.1.10 überprüft, und das Echo hat geantwortet, wenn Ping in Ordnung ist, und wenn nicht, hat es nicht geantwortet.
NB: Sie können $ 1 $ 2 $ 3 durch statische Variablen ersetzen, wenn der Bereich und die IPs immer gleich sind.
quelle
Angenommen, Sie haben 5 IPs (um nur die Antwort zu reduzieren), dann können Sie sie mit pingen
Hinweis: Keine runden Klammern, keine Kommas (,) zwischen IPs.
Ich hoffe, das hilft.
Ex:
quelle
cron
Job erwähnen , ist ein Mittel erforderlich, um den Benutzer über das Ergebnis des Jobs zu informieren, oder schlagen Sie etwas anderes vor?oder mit grep werden nur Nicht-Ping-Knoten angezeigt
quelle
Gut
So einfach ist das: Verwenden Sie den
parallel --gnu
Befehl und dann Ihren Befehl.Holen Sie sich die Beispiel-IPs:
quelle