Lorsque je fais un ping sur un site, il renvoie "Demande expirée". Je veux faire un petit programme qui m'informera (bip sonore ou quelque chose comme ça) quand ce serveur est à nouveau en ligne. Peu importe dans quelle langue. Je pense que ce devrait être un script très simple avec plusieurs lignes de code. Alors, comment l'écrire?Informez-moi quand le site (serveur) est à nouveau en ligne
Répondre
Ne pas oublier le son de notification comme echo "^ G"! Juste pour être différent - voici lot de Windows:
C:\> more pingnotify.bat
:AGAIN
ping -n 1 %1%
IF ERRORLEVEL 1 GOTO AGAIN
sndrec32 /play /close "C:\Windows\Media\Notify.wav"
C:\> pingnotify.bat localhost
:)
Certaines implémentations de ping vous permettent de spécifier les conditions de sortie après réception de paquets:
Sous Mac OS X, utilisez ping -a -o $the_host
ping
va continuer à essayer (par défaut)-a
signifie qu'un bip est émis lorsqu'un paquet est reçu-o
signifie quitter lorsqu'un paquet est reçu
Sur Linux (Ubuntu au moins), utilisez ping -a -c 1 -w inf $the_host
-a
signifie bip lorsqu'un paquet est reçu-c 1
indique le nombre de paquets à envoyer avant la sortie (dans ce cas 1)- spécifie la date limite de sortie de ping quel que soit (dans ce cas Infinite)
- lorsque
-c
et-w
sont utilisés ensemble,-c
devient nombre de paquets reçu avant la sortie
Ou peut être enchaînée pour effectuer votre commande suivante, par exemple ssh dans le serveur dès qu'il arrive (avec un écart entre sshd
pour permettre de démarrer réellement):
# ping -a -o $the_host && sleep 3 && ssh $the_host
Une façon est d'exécuter ping
est une boucle, par exemple
while ! ping -c 1 host; do sleep 1; done
(Vous pouvez rediriger la sortie vers /dev/null
si vous voulez le garder au calme.)
Sur certains systèmes, tels que Mac OS X, ping
peut aussi avoir les options -a -o
(selon une autre réponse) disponible, ce qui l'obligera à continuer de faire un ping jusqu'à ce qu'une réponse soit reçue. Cependant, le ping
sur de nombreux (la plupart?) Des systèmes Linux n'a pas l'option -o
et le type d'équivalent -c 1 -w 0
se ferme toujours si le réseau renvoie une erreur.
Edit: Si l'hôte ne répond pas au ping ou vous devez vérifier la disponibilité du service sur un certain port, vous pouvez utiliser netcat en mode E/S zéro:
while ! nc -w 5 -z host port; do sleep 1; done
Les -w 5
Précise un délai de 5 secondes pour chaque tentative individuelle. Notez qu'avec netcat vous pouvez même lister plusieurs ports (ou plages de ports) à analyser lorsque certains d'entre eux deviennent disponibles.
Édition 2: Les boucles montrées ci-dessus continuent à essayer jusqu'à ce que l'hôte (ou le port) soit atteint. Ajoutez votre commande d'alerte après eux, par ex. bip ou pop-up une fenêtre.
est '-o' une option standard? Je ne le vois pas sur Linux ou Windows –
Ah, ma mauvaise. Il semble que ne soit disponible sur mac. Je suppose qu'il peut l'envelopper dans une boucle. – Stephen
Confirmez que '-o' n'est pas disponible sous Linux. Dommage, serait très pratique pour cette utilisation. +1 de toute façon pour me montrer l'option sur mon Mac. =) – Arkku