Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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

remi82 a écrit :

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