94 votes

Vérifier la disponibilité d'un hôte en utilisant ping dans bash scripts.

Je veux écrire un script, qui vérifierait en permanence si l'un des appareils du réseau, qui devrait être en ligne toute la journée, l'est réellement. J'ai essayé d'utiliser ping, mais

if [ "`ping -c 1 some_ip_here`" ]
then
  echo 1
else
  echo 0
fi

donne 1 peu importe que j'entre une adresse IP valide ou invalide. Comment puis-je vérifier si une adresse spécifique (ou mieux n'importe quel appareil de la liste des adresses IP) a été mise hors ligne ?

5voto

emirjonb Points 193

POUR INFORMATION, Je viens de faire quelques tests en utilisant la méthode ci-dessus et si nous utilisons le multi ping (10 requêtes)

ping -c10 8.8.8.8 &> /dev/null ; echo $ ?

le résultat de la commande multi-ping sera "0" si au moins un des résultats de ping est atteignable, et "1" dans le cas où toutes les requêtes ping sont inaccessibles.

2voto

miltos Points 21
up=`fping -r 1 $1 `
if [ -z "${up}" ]; then
    printf "Host $1 not responding to ping   \n"
    else
    printf "Host $1 responding to ping  \n"
fi

1voto

helper Points 11
for i in `cat Hostlist`
do  
  ping -c1 -w2 $i | grep "PING" | awk '{print $2,$3}'
done

0voto

Alan Corey Points 419

Cela semble fonctionner modérément bien dans une fenêtre d'émulateur de terminal. Il tourne en boucle jusqu'à ce qu'il y ait une connexion, puis s'arrête.

#!/bin/bash

# ping in a loop until the net is up

declare -i s=0
declare -i m=0
while ! ping -c1 -w2 8.8.8.8 &> /dev/null ;
do
  echo "down" $m:$s
  sleep 10
  s=s+10
  if test $s -ge 60; then
    s=0
    m=m+1;
  fi
done
echo -e "--------->>  UP! (connect a speaker) <<--------" \\a

En \a à la fin essaie d'obtenir un bel char sur la connexion. J'ai essayé de le faire dans LXDE/lxpanel mais tout s'arrête jusqu'à ce que j'aie à nouveau une connexion réseau. Le fait d'avoir un temps a commencé comme un indicateur de progrès parce que si vous regardez une fenêtre avec juste "down" sur chaque ligne, vous ne pouvez même pas dire qu'elle se déplace.

0voto

bpleat Points 1

J'ai aimé l'idée de vérifier une liste comme :

for i in `cat Hostlist`
do  
  ping -c1 -w2 $i | grep "PING" | awk '{print $2,$3}'
done

mais ce snippet ne se préoccupe pas de savoir si un hôte est inaccessible, ce n'est donc pas une bonne réponse IMHO.

Je m'en suis inspiré et j'ai écrit

for i in `cat Hostlist`
do
  ping -c1 -w2 $i >/dev/null 2>&1 ; echo $i $?
done

Et je peux alors traiter chacun d'eux en conséquence.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X