Fichier de script Bash ping pour vérifier la disponibilité de lhôte

Jessaie décrire un script bash dans un fichier qui, lors de lexécution, commencerait à envoyer un ping à un hôte jusquà ce quil devienne disponible , lorsque lhôte devient joignable, il exécute une commande et cesse de sexécuter, jai essayé den écrire une mais le script continue de cingler jusquà ce que le décompte se termine,

De plus, je dois mettre ce processus en arrière-plan mais si je lance le script avec le signe dollar ($) il sexécute toujours au premier plan,

#!/bin/bash ping -c30 -i3 192.168.137.163 if [ $? -eq 0 ] then /root/scripts/test1.sh exit 0 else echo “fail” fi 

Réponse

Jutiliserais ceci, une simple ligne unique:

while ! ping -c1 HOSTNAME &>/dev/null; do echo "Ping Fail - `date`"; done ; echo "Host Found - `date`" ; /root/scripts/test1.sh 

Remplacer HOSTNAME avec lhôte auquel vous essayez denvoyer un ping.


Jai manqué la partie sur la mise en arrière-plan, mettez cette ligne dans un shellscript comme ceci:

#!/bin/sh while ! ping -c1 $1 &>/dev/null do echo "Ping Fail - `date`" done echo "Host Found - `date`" /root/scripts/test1.sh 

Et pour le fondre, vous lexécuteriez comme ceci:

nohup ./networktest.sh HOSTNAME > /tmp/networktest.out 2>&1 & 

Encore une fois, remplacez HOSTNAME avec lhôte auquel vous essayez denvoyer un ping. Dans cette approche, vous passez le nom dhôte comme argument au shellscript.

Juste comme un avertissement général, si votre hôte reste en panne, vous aurez ce script continuellement en arrière-plan jusquà ce que vous le tuiez ou lhôte est trouvé. Je garderais donc cela à lesprit lorsque vous exécutez ceci. Parce que vous pourriez finir par manger des ressources système si vous oubliez cela.

Commentaires

  • Tnx pour la réponse et lavertissement, cest un environnement visualisé donc le script démarrera après le démarrage des serveurs physiques, donc les VM ' démarreront certainement, mais gardera à lesprit si je supprime une VM, tnx à nouveau
  • Notamment en journalisant les échecs à chaque fois, et en stockant toute la sortie dans un fichier dans /tmp, si lhôte tombe en panne vous ' ll finissent par remplir /tmp. Cela a tendance à être une mauvaise nouvelle …

Réponse

En passant les paramètres « -c 30 » à ping, il essaiera 30 ping et sarrêtera. Il vérifiera ensuite si la commande réussit. Je pense quil est préférable de faire une boucle qui contient un ping et de vérifier si ce ping réussit. Quelque chose comme ça:

while true; do ping -c1 google.com if [ $? -eq 0 ] then /root/scripts/test1.sh exit 0 fi done 

Si en fonctionnant toujours au premier plan, vous voulez dire quil est toujours en cours dimpression sur le terminal, vous pouvez rediriger stdin et stdout vers / dev / null.

Commentaires

  • En déverrouillant linvite pour que je puisse travailler sur autre chose, tnx pour obtenir de laide

Réponse

Un ancien message, mais à titre de suggestion, vous pouvez utiliser loption -w pour envoyer un ping à éviter la boucle. Par exemple,

ping -w 30 -c 1 host 

essaiera pendant 30 secondes avec un ping par seconde (le ping par défaut a un intervalle dune seconde entre les pings) et se terminera au premier ping réussi .

Si vous n’avez pas besoin d’un délai d’attente, c’est-à-dire d’attendre indéfiniment, utilisez simplement une très grande valeur avec -w.

Réponse

ping -oc 100000 Hostname > /dev/null && /root/scripts/test1.sh 
  • ping -o quitte la ping après la réception du premier paquet
  • > /dev/null redirige la sortie, vous ne le verrez donc pas
  • && exécuterait la commande suivante, si la commande précédente réussissait

De plus, vous pouvez exécuter nimporte quel processus en arrière-plan en ajouter & à la fin de celui-ci; par exemple, echo "123" & sexécutera en arrière-plan

Answer

Ici fonctionne modification de votre script.

#!/bin/bash ping -c1 10.1.1.23 > /dev/null if [ $? -eq 0 ] then echo ok exit 0 else echo “fail” fi 

Vous devez envoyer la sortie à /dev/null pour quelle napparaisse pas sur lécran.

-c est destiné à compter. Si vous mettez -c30, vous « allez envoyer un ping 30 fois avant que votre script puisse passer à la ligne suivante. Jutilise -c1 pour rendre le script plus rapide.

-i consiste à attendre quelques secondes entre lenvoi de chaque paquet. Donc -i3 est dattendre 3 secondes. Je supprime -i pour rendre le script plus rapide.

Dernier point mais non le moindre, utilisez lindentation pour que votre code soit beau et plus facile à lire.

Exemple de sortie

user@linux:~$ ./script.sh ok user@linux:~$ user@linux:~$ ./script.sh “fail” user@linux:~$ 

Réponse

#!/bin/sh if [ $1 ] then for i in ` cat $1` do VAR1=$(ping -ac 2 $i| grep -c error) if [ $VAR1 == "0" ] then echo " valid : $i" else echo " invalid : $i" fi done else echo " please present the file name. example: pong /tmp/a " fi 

Commentaires

  • Vous voudrez peut-être aussi pour ajouter des mots explicatifs …?

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *