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
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 laping
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 …?
/tmp
, si lhôte tombe en panne vous ' ll finissent par remplir/tmp
. Cela a tendance à être une mauvaise nouvelle …