#1 Le 06/04/2011, à 12:21
- remi82
[Résolu] Script pour éteindre un serveur si le principal est éteint
Bonjour,
Je voulais savoir s'il était possible d'exécuter un script toutes les 5mn qui ping un serveur. Et si ce serveur est éteint, qu'il éteigne dans ce cas mon autre serveur.
Pourquoi je souhaites faire ça.
En fait, j'ai deux serveur sous ubuntu 10.04.
Il y a un onduleur pour les deux serveurs.
J'ai donc installé nut sur les deux serveurs. Le premier est quand à lui relié via un câble USB. Si une coupure de courant dure plus de 5mn, le serveur s'éteint.
Et normalement, le 2ème serveur devrait s'éteindre. Mais je n'arrive pas à configurer nut en esclave depuis que je suis passé en 10.04. Avec la 8.04, ça fonctionnait.
Donc, j'aimerai trouvé une parade.
Merci d'avance.
Dernière modification par remi82 (Le 11/04/2011, à 12:19)
Hors ligne
#2 Le 06/04/2011, à 12:34
- quentin.theuret
Re : [Résolu] Script pour éteindre un serveur si le principal est éteint
HOST="your.server.addr"
# no ping request
COUNT=1
count=$(ping -c $COUNT $HOST | grep 'received' | awk -F',' '{ print $2 }' | awk '{ print $1 }')
if [ $count -eq 0 ]; then
# 100% failed
shutdown -h 0
fi
Dernière modification par quentin.theuret (Le 06/04/2011, à 12:34)
Framasoft: La route est longue mais la voie est libre.
Consultant Logiciels Libres / Odoo
https://www.quentin-theuret.net
Hors ligne
#3 Le 06/04/2011, à 16:03
- remi82
Re : [Résolu] Script pour éteindre un serveur si le principal est éteint
Bonjour quentin.theuret,
Merci pour le script. Je vais le tester dans l'après midi.
Par contre, n'étant pas très doué dans ce domaine ; pourrais-tu m'expliquer brièvement le fonctionnement.
Merci d'avance.
Hors ligne
#4 Le 06/04/2011, à 16:06
- quentin.theuret
Re : [Résolu] Script pour éteindre un serveur si le principal est éteint
La ligne :
count=$(ping -c $COUNT $HOST | grep 'received' | awk -F',' '{ print $2 }' | awk '{ print $1 }')
va faire un ping sur la machine déclarée dans $HOST.
Si la commande de ping retourne 0, alors on lance la commande
shutdown -h 0
pour éteindre le serveur sans attendre.
-h pour halt (arrêt) et 0 pour le temps d'attente avant l'extinction (en min.). si tu mets 5 au lieu de 0, ton serveur s'éteindra 5 minutes après que la commande ait échouée.
Framasoft: La route est longue mais la voie est libre.
Consultant Logiciels Libres / Odoo
https://www.quentin-theuret.net
Hors ligne
#5 Le 06/04/2011, à 16:11
- remi82
Re : [Résolu] Script pour éteindre un serveur si le principal est éteint
Je viens de tester le script.
J'ai ce message d'erreur :
: not found.sh: 2:
: not found.sh: 5:
shutdown-ip.sh: 10: Syntax error: "fi" unexpected (expecting "then")
Encore merci
Hors ligne
#6 Le 06/04/2011, à 16:12
- remi82
Re : [Résolu] Script pour éteindre un serveur si le principal est éteint
Autre chose, il faut que je lance le script au démarrage ?
Et celui-ci tourne continuellement ?
Encore merci
Hors ligne
#7 Le 06/04/2011, à 16:49
- quentin.theuret
Re : [Résolu] Script pour éteindre un serveur si le principal est éteint
Non, il faut utiliser cron pour que celui-ci soit lancé à intervalles réguliers.
Toute la documentation ici : http://doc.ubuntu-fr.org/cron
Chez moi, le script fonctionne ! Sous quelle distribution es-tu ?
Dernière modification par quentin.theuret (Le 06/04/2011, à 16:53)
Framasoft: La route est longue mais la voie est libre.
Consultant Logiciels Libres / Odoo
https://www.quentin-theuret.net
Hors ligne
#8 Le 06/04/2011, à 17:04
- remi82
Re : [Résolu] Script pour éteindre un serveur si le principal est éteint
Je suis sous ubuntu server 10.04
Sinon, le script, il fait un ping, il test si ok ou ko ?
Il ne fait pas de ping en continue ? (Pour ne pas saturer le réseau)
Encore merci
Dernière modification par remi82 (Le 06/04/2011, à 17:05)
Hors ligne
#9 Le 06/04/2011, à 17:07
- quentin.theuret
Re : [Résolu] Script pour éteindre un serveur si le principal est éteint
Non, il ne fait pas de ping en continue.
Pour le faire en continu :
HOST="10.0.0.2"
# no ping request
COUNT=1
while [ 1 ]
do
count=$(ping -c $COUNT $HOST | grep 'received' | awk -F',' '{ print $2 }' | awk '{ print $1 }')
if [ $count -eq 0 ]; then
# 100% failed
shutdown -h 120
fi
sleep 10
done
Il faut modifier le chiffre du sleep (ici c'est toutes les 10 secondes) si tu veux le faire toutes les minutes (60), toutes les heures (3600), etc.
Sinon pour apprendre à faire ce genre de script : http://www.siteduzero.com/tutoriel-3-12 … part_88347
Dernière modification par quentin.theuret (Le 06/04/2011, à 17:12)
Framasoft: La route est longue mais la voie est libre.
Consultant Logiciels Libres / Odoo
https://www.quentin-theuret.net
Hors ligne
#10 Le 06/04/2011, à 17:10
- remi82
Re : [Résolu] Script pour éteindre un serveur si le principal est éteint
Non, je ne veux pas le faire en continue. Je ne veut pas saturer le réseau.
Par contre, j'ai toujours le même problème.
: not found.sh: 2:
: not found.sh: 5:
shutdown-ip.sh: 10: Syntax error: "fi" unexpected (expecting "then")
Et je n'arrive pas à comprendre ce qui le gêne après ou avant le "then"
Encore merci pour ton aide
Hors ligne
#11 Le 06/04/2011, à 17:13
- quentin.theuret
Re : [Résolu] Script pour éteindre un serveur si le principal est éteint
Et je n'arrive pas à comprendre ce qui le gêne après ou avant le "then"
Copie-colle ton code, je vais regarder !
Framasoft: La route est longue mais la voie est libre.
Consultant Logiciels Libres / Odoo
https://www.quentin-theuret.net
Hors ligne
#12 Le 06/04/2011, à 17:35
- remi82
Re : [Résolu] Script pour éteindre un serveur si le principal est éteint
Pour la variable HOST, j'ai essayé avec et sans les guillemets
HOST=192.168.0.5
# no ping request
COUNT=1
count=$(ping -c $COUNT $HOST | grep 'received' | awk -F',' '{ print $2 }' | awk '{ print $1 }')
if [ $count -eq 0 ]; then
# 100% failed
shutdown -h 0
fi
Merci
Hors ligne
#13 Le 06/04/2011, à 17:37
- quentin.theuret
Re : [Résolu] Script pour éteindre un serveur si le principal est éteint
et si tu enlèves le ; après le if et que tu mets le then à la ligne ?
Framasoft: La route est longue mais la voie est libre.
Consultant Logiciels Libres / Odoo
https://www.quentin-theuret.net
Hors ligne
#14 Le 06/04/2011, à 17:41
- remi82
Re : [Résolu] Script pour éteindre un serveur si le principal est éteint
Ça me fait exactement le même message d'erreur.
Merci
Hors ligne
#15 Le 06/04/2011, à 17:42
- remi82
Re : [Résolu] Script pour éteindre un serveur si le principal est éteint
Je me trompe peut être.
Pour le lancer, il faut bien utilisaer la commande "sh" ?
Hors ligne
#16 Le 06/04/2011, à 17:45
- quentin.theuret
Re : [Résolu] Script pour éteindre un serveur si le principal est éteint
et si tu tapes
HOST=10.0.0.2;COUNT=1;count=$(ping -c $COUNT $HOST | grep 'received' | awk -F',' '{ print $2 }' | awk '{ print $1 }');if [ $count -eq 0 ]; then echo "pas de ping"; fi
dans ton terminal, est-ce que l'erreur apparaît ?
Framasoft: La route est longue mais la voie est libre.
Consultant Logiciels Libres / Odoo
https://www.quentin-theuret.net
Hors ligne
#17 Le 06/04/2011, à 17:53
- remi82
Re : [Résolu] Script pour éteindre un serveur si le principal est éteint
Que je tape
HOST=192.168.0.5;COUNT=1;count=$(ping -c $COUNT $HOST | grep 'received' | awk -F',' '{ print $2 }' | awk '{ print $1 }');if [ $count -eq 0 ]; then echo "pas de ping"; fi
je n'ai pas d'erreur. Si je débranche le pc que je ping, j'ai le message "pas de ping"
Hors ligne
#18 Le 06/04/2011, à 17:56
- remi82
Re : [Résolu] Script pour éteindre un serveur si le principal est éteint
Je viens donc de modifier le script pour que le pc s'éteigne s'il n'y à pas de ping.
Je te remercie.
Mais quelle est la cause du problème ?
Encore merci pour ton aide
Dernière modification par remi82 (Le 06/04/2011, à 17:56)
Hors ligne
#19 Le 06/04/2011, à 17:59
- quentin.theuret
Re : [Résolu] Script pour éteindre un serveur si le principal est éteint
Maintenant que la commande fonctionne, il suffit de la coller dans un fichier et de lancer le fichier avec un cron à intervalles réguilers.
Si tu veux que ce soit plus joli, tu peux faire un retour à la ligne après chaque ';'
Framasoft: La route est longue mais la voie est libre.
Consultant Logiciels Libres / Odoo
https://www.quentin-theuret.net
Hors ligne
#20 Le 06/04/2011, à 18:01
- remi82
Re : [Résolu] Script pour éteindre un serveur si le principal est éteint
Ok,
Je te remercie beaucoup.
Hors ligne
#21 Le 07/04/2011, à 10:50
- remi82
Re : [Résolu] Script pour éteindre un serveur si le principal est éteint
Bonjour,
Me revoilà,
Le script fonctionne parfaitement quand je le lance manuellement.
Par contre, via crontab, il ne se passe rien.
Y a t'il une particularité ?
Merci d'avance
Hors ligne
#22 Le 07/04/2011, à 17:37
- quentin.theuret
Re : [Résolu] Script pour éteindre un serveur si le principal est éteint
Peux-tu copier ta ligne de cron ici ?
Framasoft: La route est longue mais la voie est libre.
Consultant Logiciels Libres / Odoo
https://www.quentin-theuret.net
Hors ligne
#23 Le 07/04/2011, à 17:52
- remi82
Re : [Résolu] Script pour éteindre un serveur si le principal est éteint
Bonsoir,
Voici la ligne du crontab :
*/2 * * * * sh /home/user/shutdown-ip.sh
Merci
Dernière modification par remi82 (Le 07/04/2011, à 17:52)
Hors ligne
#24 Le 07/04/2011, à 18:57
- KujakuChan
Re : [Résolu] Script pour éteindre un serveur si le principal est éteint
Et un ls -l shutdown-ip.sh dans le répertoire idoine qu'est-ce que ça donne ?
J'imagine que tu as du y penser mais sait-on jamais, si le script n'est pas exécutable il faut le rendre exécutable
chmod +x shutdown-ip.sh
Aussi vérifie le journal de cron pour voir si le script est exécuté. C'est peut-être transparent à ton niveau.
Si tu n'as pas le script /var/log/cron.log c'est qu'il n'est pas activé.
Il faut dé-commenter une ligne très clairement identifiable dans le fichier /etc/syslog.conf
Dernière modification par KujakuChan (Le 07/04/2011, à 19:00)
自分の考え:ウィンドウズがライナックスに対するのはデルフィがC++に対するようなものである。
Just a thought : Windows is to Linux as Delphi is to C++ . Juste une pensée : Windows est à Linux ce que Delphi est à C++.
Hors ligne
#25 Le 07/04/2011, à 21:44
- remi82
Re : [Résolu] Script pour éteindre un serveur si le principal est éteint
Bonsoir KujakuChan,
J'ai rendu le script exécutable. Pour le reste, je testerai demain matin.
Je te tiens au courant.
Merci
Hors ligne