#1 Le 06/10/2010, à 16:47
- blattes86
[RESOLU] script vérifiant présence d'une machine
Bonjour a tous.
Ayant eu quelques coupure électrique aujourd'hui, nous nous sommes décidé au travail d'acheter un onduleur assez puissant afin de protéger nos serveur.
Par contre l'onduleur que j'ai en vu n'est capable de manager qu'une seule machine.
Afin de protéger qu'en même les autre serveurs, j'ai cherché a faire un script, qui vérifiait la présence su serveur principal afin de tout couper en cas d'absence. J'ai cherché a faire cela grâce a un ping mis cela ne fonctionne pas
Voici le script de test
if [ `ping -c10 192.168.1.1` == /100%/ ]
then
echo "hs";
else
echo "ok";
fi
A chaque fois que lance le script j'obtiens cette réponse :
bash: [: trop d'arguments
ok
Ayant passé toute ma journée a m'arracher les cheveux dessus, je viens donc solliciter votre aide.
En espérant que vous aurez des idées, Bonne soiré a tous
Dernière modification par blattes86 (Le 06/10/2010, à 17:09)
Hors ligne
#2 Le 06/10/2010, à 16:59
- tirom14
Re : [RESOLU] script vérifiant présence d'une machine
Hello !!!
Alors je sais pas trop si je peut t'aider mais ton sujet m'interesse :
Pourquoi "`ping -c10 192.168.1.1` == /100%/" ?
'fin j'veut dire que l'expression ping va pas retourner "100%" ?
Sinon peut être en utilisant nmap,
genre :
nmap -sP 192.168.1.1
Ca te renvoit si la machine est euh... up.
Le resultat renvoyé est un peu brut, mais en travaillant la chose....
genre :
nmap -sP 192.168.1.1 | grep "1 host up"
Sa te renverra une ligne si il est allumé ou sinon rien
[edit] en testant la valeur de retour, genre
if test $? -eq 0
condition vrai pour machine active
Dernière modification par tirom14 (Le 06/10/2010, à 17:02)
Hors ligne
#3 Le 06/10/2010, à 17:08
- blattes86
Re : [RESOLU] script vérifiant présence d'une machine
Problème réglé :
En fouillant bocoup plus sur le forum j'ai enfin trouvé ma solution grâce a ce sujet http://forum.ubuntu-fr.org/viewtopic.php?id=420375
voila donc le script final et fonctionnell
result=`ping -c1 192.168.1.2 | grep "1 received"`
if [[ $result = "" ]]
then
echo "dodo";
sudo halt;
else
echo "ok";
fi
P.S. :merci tout de même de ton aide tirom14
Dernière modification par blattes86 (Le 06/10/2010, à 17:09)
Hors ligne
#4 Le 06/10/2010, à 17:11
- sputnick
Re : [RESOLU] script vérifiant présence d'une machine
Pop po pop !?
Pourquoi tant de haine ?
if ping &>/dev/null -c1 10.0.0.1; then
echo "10.0.0.1 is up, w00t !"
else
echo >&2 "Houston, ya de la m.... dans le bastringue ! Le vol 10.0.0.1 ne réponds plus ! MAYDAY !"
fi
Si tu comprends pas, dit moi quoi (mais cherche un peu)
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#5 Le 07/10/2010, à 08:11
- nesthib
Re : [RESOLU] script vérifiant présence d'une machine
Pourquoi tant de haine ?
if ping &>/dev/null -c1 10.0.0.1
Pourquoi tant de haine ?
if ping -q -c1 10.0.0.1
indice : if prend en compte le code de retour des commandes, echo $? pour afficher le code de retour de la commande précédente
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#6 Le 07/10/2010, à 10:24
- sputnick
Re : [RESOLU] script vérifiant présence d'une machine
Oui, mais on peut encore raccourcir en utilisant la "vérité" des commandes.
Toutes commandes (les 4443 chez moi :
find ${PATH//:/ } -type f | wc -l
) ont un code de retour qui vaut vrai ou faux. Le vrai est toujours 0 et le faux (en bash) de 1 à 255. C'est la logique booléenne.
Mais ça c'est la théorie, la pratique :
ping -q -c1 10.0.0.1 && echo "10.0.0.1 is up, w00t !" || echo >&2 "Houston, ya de la m.... dans le bastringue"
autre exemple :
grep -q "^blattes86:" /etc/passwd && echo "blattes86 est dans /etc/passwd"
&& est un ET logique
|| est un OU logique
Dernière modification par sputnick (Le 07/10/2010, à 12:47)
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#7 Le 07/10/2010, à 19:29
- Totor
Re : [RESOLU] script vérifiant présence d'une machine
au risque de me répéter :
commande1 && commande2 || commande3 n'équivaut pas à un if commande1; then commande2; else commande3; fi
Dans la majeure partie des cas, c'est vrai mais il en existe où c'est faux.
Un contre exemple :
[ 1 -eq 1 ] && [ 1 -eq 2 ] || echo "dommage !"
Donc dans les faits, c'est le cas uniquement si commande2 retourne vrai
-- Lucid Lynx --
Hors ligne
#8 Le 07/10/2010, à 19:40
- sputnick
Re : [RESOLU] script vérifiant présence d'une machine
Je plussoie, j'utilise cette forme uniquement quand je suis sur du retour de la commande1, comme avec les echo comme ici.
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#9 Le 07/10/2010, à 19:51
- ehmicky
Re : [RESOLU] script vérifiant présence d'une machine
Pour moi :
commande1 && commande2 || commande3
équivaut à :
( commande1 && commande2 ) || commande3
soit :
if commande1; then
if ! commande2; then
commande3
fi
else
commande3
fi
Donc a && b || c n'équivaut pas à "if/then/else" lorsque a est vrai et b est faux.
Dernière modification par ehmicky (Le 07/10/2010, à 19:54)
Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?
Hors ligne