Mehrere IPs mit bash pingen?


17

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.

Vielen Dank.


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,

10.12.13.14
172.15.48.3
192.168.45.54
...
48.114.78.227

Sie können dieses Skript verwenden,

#!/bin/bash
# Program name: pingall.sh
date
cat /path/to/list.txt |  while read output
do
    ping -c 1 "$output" > /dev/null
    if [ $? -eq 0 ]; then
    echo "node $output is up" 
    else
    echo "node $output is down"
    fi
done

Um den Betriebsstatus Ihrer Knoten in einem Intervall von 30 Minuten zu aktualisieren, verwenden Sie crontab,

*/30 * * * * /path/to/pingall.sh > /path/to/log.txt

Ausgabe von log.txt

$ cat /path/to/log.txt
Fri Jan 31 15:06:01 IST 2014
node 10.12.13.14 is up
node 172.15.48.3 is up
node 192.168.45.54 is up
...
node 48.114.78.227 is down

ist es nicht das, was du erwartet hast?
Souravc

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


1

Überprüfen Sie dieses Skript.

   #!/bin/bash
    for i in `seq ${2} ${3}`
    do
        ping -c 1 ${1}.${i} > /dev/null 2>&1
        if [ $? -eq 0 ]; then
            echo "${1}.${i} responded."
        else
            echo "${1}.${i} did not respond."
        fi
    done

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 in 74.125.236.70  98.139.183.24  65.55.206.228  91.189.94.156 198.252.206.24
do
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.
From 10.22.96.94 icmp_seq=5 Packet 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
rɑːdʒɑ

1
echo 192.168.1.1 192.168.1.2 192.168.1.3 | xargs -n1 ping -w 1

oder mit grep werden nur Nicht-Ping-Knoten angezeigt

echo 192.168.1.1 192.168.1.2 192.168.1.3 | xargs -n1 ping -w 1 | grep -b1 100

1

Gut

So einfach ist das: Verwenden Sie den parallel --gnuBefehl und dann Ihren Befehl.

Holen Sie sich die Beispiel-IPs:

$ dig +trace google.com |ipx

127.0.0.1
127.0.0.1
199.7.91.13
199.7.91.13
192.48.79.30
192.48.79.30
173.194.33.161
173.194.33.165
173.194.33.163
173.194.33.164
173.194.33.174
173.194.33.160
173.194.33.167
173.194.33.166
173.194.33.162
173.194.33.169
173.194.33.168
216.239.32.10
216.239.32.10

$ parallel --gnu ping -c1 ::: `dig +trace google.com |ipx`
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_req=1 ttl=64 time=0.018 ms

--- 127.0.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.018/0.018/0.018/0.000 ms
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_req=1 ttl=64 time=0.017 ms

--- 127.0.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.017/0.017/0.017/0.000 ms
PING 173.194.33.132 (173.194.33.132) 56(84) bytes of data.
64 bytes from 173.194.33.132: icmp_req=1 ttl=54 time=20.5 ms

--- 173.194.33.132 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 20.526/20.526/20.526/0.000 ms
PING 173.194.33.131 (173.194.33.131) 56(84) bytes of data.
64 bytes from 173.194.33.131: icmp_req=1 ttl=54 time=20.7 ms
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.