Vraag meerdere IP's pingelen met bash?


Ik heb 10 IP-nummers die ik dagelijks moet pingen om te controleren, hoe kan ik dat doen door het BASH-script te gebruiken. Zodat ik die taak kan automatiseren door cron te gebruiken. Ik wil alleen het BASH-script.

Dank je.


14
2018-01-31 05:24


oorsprong


Hieronder antwoord heb ik IP's van Google, yahoo, msn etc. genoemd. Ik heb dat zelf geprobeerd. Het invoegen van {} en, werkt hier niet tussen IP's om ze te scheiden. hoop dat het iemand in de toekomst kan helpen. Bedankt voor het lezen. - Ten-Coin
Het drukke leven is bedankt - Ten-Coin


antwoorden:


Omdat uw ip-bereik geen symmetrie heeft en er slechts 10 knooppunten zijn, zou ik voorstellen om ze in een tekstbestand te vermelden. Ik overweeg het bestand dat de lijst bevat list.txt die een lijst van ip één op elke regel bevat, zoals hieronder getoond,

10.12.13.14
172.15.48.3
192.168.45.54
...
48.114.78.227

U kunt dit script gebruiken,

#!/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

Als u de hardloopstatus van uw knooppunten wilt bijwerken met een interval van 30 minuten, gebruikt u bij crontab,

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

Uitvoer van 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

14
2018-01-31 09:35



Is het niet wat je verwachtte? - souravc
dit lijkt precies waar OP naar op zoek zou moeten zijn .. en aangezien websites zoals google.com, yahoo.com, etc. meerdere servers gebruiken om verzoeken af ​​te handelen, is het beter om ze te pingen met hun domeinnamen (zodat je dat mogelijk niet zult doen) moet de IP in de ping-lijst de komende week veranderen) .. - precise
Werkt prima, ik heb een licht aangepast antwoord geplaatst dat ik gebruik in een Travis CI-omgeving. - MitchellK


#!/bin/bash
while 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

$ cat host.txt

host1.example.com
192.168.0.123
8.8.8.8
...
...
google.com

Zien:
http://www.thelinuxtips.com/2012/06/shell-script-to-ping-multiple-hosts/


2
2017-08-15 00:35





Controleer dit script.

   #!/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

Om ./script 192.168.1 0 10 uit te voeren, zal dit bijvoorbeeld de ips 192.168.1.0 naar 192.168.1.10 ckecken en antwoordde de echo als de ping in orde is en niet reageerde indien niet.

NB: Je kunt $ 1 $ 2 $ 3 vervangen door statische variabelen als het bereik en de IP's altijd hetzelfde zijn.


1
2018-01-31 05:48



IP zijn niet van hetzelfde bereik. dat zijn de criteria achter. hoe dan ook bedankt voor het antwoord. + 1 - Ten-Coin
ok, vermeld dat alsjeblieft in je vraag. Bedankt voor + - Maythux
Een net en eenvoudig script dat erg nuttig zou kunnen zijn (d.w.z. op ingesloten apparaten), zelfs als het de voorwaarden van de vraag niet voor 100% aanpakt. Dank U. +1 verdiende. - Sopalajo de Arrierez


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

of met grep, zie alleen niet-ping-nodes

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

1
2018-01-07 15:19





Goed

Eenvoudig als dat: gebruik parallel --gnu commando en dan je commando.

Verkrijg de voorbeeld IP's:

$ 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

1
2017-10-24 14:19





Stel dat je 5 IP's hebt (om het antwoord alleen te verkleinen), dan kun je ze pingen met

#!/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

Opmerking: Geen krul haakjes, geen komma's (,) tussen IP's.

Ik hoop dat het helpt.

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

0
2018-01-31 05:26



je hebt de implementatie met cron niet getoond zoals vermeld in je Q .. ook hoe zou dat script het resultaat van de pingverzoeken melden .. - precise
Ik heb wel gezegd dat ik alleen script wil. Cron maakt geen deel uit van de vraag. Cron vermeldde waarom ik dit script nodig heb en noem het doel van dit script als een cron-baan. - Ten-Coin
@hash Probeer het voordat je het vraagt ​​aan mijn lieve vriend. Bedankt voor het kijken. - Ten-Coin
Ik heb nooit gezegd dat het script niet zal werken .. maar zoals je Q vermeldt cron werk, een middel om de gebruiker op de hoogte te stellen van het resultaat van de klus, of zou je iets anders moeten voorstellen? - precise
mijn doel is cron job, ik bedoel waarom ik dit BASH-script nodig heb. maar mijn vereiste is bash @hash - Ten-Coin