J'ai 10 numéros IP que je dois tester quotidiennement pour vérifier, comment je peux le faire en utilisant le script BASH. Pour que je puisse automatiser cette tâche en utilisant cron. Je veux uniquement le script BASH.
Ci-dessous la réponse, j'ai mentionné les IP de Google, yahoo, msn etc. J'ai essayé moi-même. L'insertion de {} et, ne fonctionne pas ici entre les IP pour les séparer. j'espère que cela peut aider quelqu'un à l'avenir. Merci pour la lecture.
rɑːdʒɑ
Réponses:
18
Comme votre plage ip n'a pas de symétrie et qu'il n'y a que 10 nœuds, je suggère de les répertorier dans un fichier texte. Je considère que le fichier contenant la liste est celui list.txtqui contient la liste des ip un à chaque ligne comme indiqué ci-dessous,
cela semble être exactement ce que l'OP devrait rechercher. devez changer l'adresse IP dans votre liste de ping la semaine à venir) ..
précis
Fonctionne très bien, j'ai posté une réponse légèrement modifiée que j'utilise dans un environnement 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
Pour exécuter ./script 192.168.1 0 10 par exemple, cela vérifiera les ips 192.168.1.0 à 192.168.1.10 et l'écho a répondu si le ping est correct et n'a pas répondu sinon.
NB: Vous pouvez remplacer $ 1 $ 2 $ 3 par des variables statiques si la plage et les IP sont toujours les mêmes.
Les IP ne sont pas de la même plage. c'est les critères derrière. merci pour la réponse. + 1
rɑːdʒɑ
ok, veuillez l'indiquer dans votre question. Merci pour +
Maythux
Un script soigné et simple qui pourrait être très utile (ie: sur des appareils embarqués), même s'il ne répond pas à 100% aux conditions de la question. Merci. +1 mérité.
Sopalajo de Arrierez le
1
Supposons que vous disposez de 5 adresses IP (pour réduire la réponse uniquement), puis vous pouvez
#!/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
Remarque: Pas de crochets, pas de virgules (,) entre les IP.
J'espère que cela pourra aider.
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
vous n'avez pas montré l'implémentation avec cron comme mentionné dans votre Q .. aussi comment ce script notifierait-il le résultat des requêtes ping ..
précis
J'ai mentionné que je ne voulais que du script. Cron ne fait pas partie de la question. Cron a mentionné pourquoi j'avais besoin de ce script et mentionner le but de ce script en tant que travail cron.
rɑːdʒɑ
@hash Essayez-le avant de demander à mon cher ami. Merci d'avoir cherché.
rɑːdʒɑ
Je n'ai jamais dit que le script ne fonctionnerait pas .. mais comme votre Q mentionne le crontravail, un moyen d'informer l'utilisateur du résultat du travail serait nécessaire, ou suggérez-vous autre chose?
précis
mon but est le travail cron, je veux dire pourquoi j'ai besoin de ce script BASH, mais mon exigence est bash @hash
Réponses:
Comme votre plage ip n'a pas de symétrie et qu'il n'y a que 10 nœuds, je suggère de les répertorier dans un fichier texte. Je considère que le fichier contenant la liste est celui
list.txt
qui contient la liste des ip un à chaque ligne comme indiqué ci-dessous,Vous pouvez utiliser ce script,
Pour mettre à jour l'état d'exécution de vos nœuds à un intervalle de 30 minutes, utilisez crontab,
Sortie de log.txt
la source
$ cat host.txt
Voir:
http://www.thelinuxtips.com/2012/06/shell-script-to-ping-multiple-hosts/
la source
Vérifiez ce script.
Pour exécuter ./script 192.168.1 0 10 par exemple, cela vérifiera les ips 192.168.1.0 à 192.168.1.10 et l'écho a répondu si le ping est correct et n'a pas répondu sinon.
NB: Vous pouvez remplacer $ 1 $ 2 $ 3 par des variables statiques si la plage et les IP sont toujours les mêmes.
la source
Supposons que vous disposez de 5 adresses IP (pour réduire la réponse uniquement), puis vous pouvez
Remarque: Pas de crochets, pas de virgules (,) entre les IP.
J'espère que cela pourra aider.
Ex:
la source
cron
travail, un moyen d'informer l'utilisateur du résultat du travail serait nécessaire, ou suggérez-vous autre chose?ou avec grep, voir uniquement les nœuds non ping
la source
bien
Aussi simple que cela: utiliser
parallel --gnu
commande puis votre commande.Obtenez les IP d'exemple:
la source