#1 Le 25/05/2011, à 08:54
- pem1664
[Résolu]probleme script pour relance connexion ppp
Bonjour a tous,
il y a quelques temps j'avais fais (ou récupéré je ne sais plus bien) un petit script pour pinger un pc et envoyer un mail si celui ci ne répondais pas au ping, ce script fonctionne assez bien , le voici :
#! /usr/bin/env bash
destination="Destination Host Unreachable"
ipatester="192.168.1.15"
if ping -c 2 $ipatester | grep "$destination"
then
echo "pb ping"
echo "Le pc $ipatester ne répond pas aux ping" | mail -s "pas de réponse au ping de $ipatester" XXX@gmail.com
else echo "ping ok"
fi
Donc vu que j'ai une connexion 56k, et que régulierement elle se déconnecte, j'ai voulu faire un petit script pour la relancer automatiquement en cas de non réponse au ping de google par ex, le voici :
#!/usr/bin/env bash
destination="ping: unknown host google.fr"
ipatester="google.fr"
if ping -c 2 $ipatester | grep "$destination";
then echo "pb ping" && sudo /sbin/ifdown ppp0 && sudo /sbin/ifup ppp0 && sudo /sbin/iptables -t nat -A POSTROUTING -s 192.168.1.0/4 -o ppp0 -j MASQUERADE && sleep 90
else echo "ping ok"
if ping -c 2 $ipatester | grep "$destination";
then echo "pb ping" && sudo reboot
else echo "ping ok 2eme passe"
fi
fi
Et la, ca ne fonctionne pas.. quand je desactive l'interface ppp0, ping me renvoie :
ping: unknown host google.fr
et pourtant grep ne veux pas le trouver.. je ne comprend pas?
Quelqu'un pourrait il m'aider a savoir ce qui ne va pas?
Dernière modification par pem1664 (Le 25/05/2011, à 10:31)
Pas de problème sans solutions, mettre [résolu] dans son premier post permet de rechercher plus facilement une solution... ;)
Hors ligne
#2 Le 25/05/2011, à 10:12
- Immae
Re : [Résolu]probleme script pour relance connexion ppp
Bonjour,
Ceci est normal car
ping: unknown host google.fr
est en fait un message d'erreur.
Pour pourvoir l'utiliser avec grep il faut le "transmettre" à la sortie standard
if ping -c 2 $ipatester | grep "$destination";
deviendra
if ping -c 2 $ipatester 2>&1 | grep "$destination";
Bon courage !
Hors ligne
#3 Le 25/05/2011, à 10:25
- pem1664
Re : [Résolu]probleme script pour relance connexion ppp
Bonjour Immae,
Ca marche impec! Et ca veux dire quoi
2>&1
? ce sont les états de la sortie standard?
Merci en tout cas!
Pas de problème sans solutions, mettre [résolu] dans son premier post permet de rechercher plus facilement une solution... ;)
Hors ligne
#4 Le 25/05/2011, à 10:36
- Immae
Re : [Résolu]probleme script pour relance connexion ppp
En fait un programme utilise deux sorties, une "sortie standard" et une "sortie d'erreur", qu'il utilise comme il veut (le plus souvent dans le sens indiqué par leur nom). Comme on n'a qu'un seul terminal, ces deux sorties sont en général mélangées, mais lorsque tu utilises le pipe c'est uniquement la "sortie standard" qui est transmise au programme suivant, la "sortie d'erreur" restant dans le terminal (par défaut).
Le but ici est donc d'envoyer la sortie d'erreur sur la sortie standard avant de la transmettre au grep.
Le "1" et le "2" désignent simplement le numéro de la sortie standard et de la sortie d'erreur respectivement, et 2>&1 est une façon d'indiquer à bash de rediriger 2 sur 1 (cf le man pour ça)
Hors ligne
#5 Le 25/05/2011, à 20:56
- pem1664
Re : [Résolu]probleme script pour relance connexion ppp
Merci Immae pour tes explications, c'est bien ce que j'avais cru comprendre mais je n'avais pas trouvé ca aussi explicite dans le man et j'aurais été incapable de le trouver tout seul!
Merci pour tout, ca va bien m'aider de savoir ca pour d'autres scripts ou pour comprendre ceux des autres
Pas de problème sans solutions, mettre [résolu] dans son premier post permet de rechercher plus facilement une solution... ;)
Hors ligne
#6 Le 26/05/2011, à 16:54
- FRUiT
Re : [Résolu]probleme script pour relance connexion ppp
Euh, on peut aussi faire plus simple :
if ping -c2 $adresse >/dev/null 2>&1; then
echo "Ping réussi"
else
echo "Ping échoué"
fi
Dernière modification par FRUiT (Le 26/05/2011, à 16:58)
Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean
Hors ligne
#7 Le 26/05/2011, à 17:15
- pem1664
Re : [Résolu]probleme script pour relance connexion ppp
Hello, bah ca c'est un truc que j'ai vu plusieurs fois et que j'ai pas compris
>/dev/null
?
Donc tu ne compare a aucune chaine de caractere préenregistré? Juste si ping renvoi sur la sortie erreur alors? c'est ca?
Pas de problème sans solutions, mettre [résolu] dans son premier post permet de rechercher plus facilement une solution... ;)
Hors ligne
#8 Le 26/05/2011, à 17:58
- FRUiT
Re : [Résolu]probleme script pour relance connexion ppp
Non je redirige la sortie de ping.
Au lieu d'écrire sur l'écran, j'écris dans un périphérique virtuel, de sorte que rien ne s'affiche à l'écran dans la console. « /dev/null » a été spécialement inventé à cet effet. Ainsi, dans la console je ne verrai QUE « Ping réussi » ou « Ping échoué », et aucun autre texte ayant été produit par ping. C'est juste une mesure esthétique en somme j'aurais pu ne pas l'écrire.
Pour essayer tu peux faire :
ping -c2 $adresse >~/monfichier 2>&1
Tu auras dans ton répertoire utilisateur un nouveau fichier nommé « monfichier » et qui contiendra la sortie de la commande ping.
Donc tu peux en gros traduire « >/dev/null » par « écrire nulle part ».
D'autre part la commande ping a un code d'erreur de sortie. Pour t'en convraincre tu peux faire un « echo $? » juste après la commande pour voir quel code d'erreur elle a renvoyé.
Ping en particulier renvoie un code 0 si le ping a réussi, et 1 ou plus si le ping a échoué.
0 est considéré par le builtin « if » comme un test réussi, et 1 ou plus comme un test échoué. Il « lit » donc (on dit plutôt qu'il « évalue ») en quelque sorte le code d'erreur renvoyé par ping, et exécute les commandes en fonction de celui ci.
J'aurais pu écrire :
ping -c2 $adresse >/dev/null 2>&1
if [ $? -eq 0 ]; then
echo "Ping réussi"
else
echo "Ping échoué"
fi
Mais bon, autant faire au plus court
Dernière modification par FRUiT (Le 26/05/2011, à 18:19)
Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean
Hors ligne
#9 Le 26/05/2011, à 18:14
- pem1664
Re : [Résolu]probleme script pour relance connexion ppp
Ok, j'ai compris, merci, très claire ton explication! Une petite question cependant, /dev/null est limité par quoi? on peux ecrire ce qu'on veux dedans? en gros ca sert de tampon mais comment est il vidé? a la fin du script? a la fin de la commande qui l'utilise?
Pas de problème sans solutions, mettre [résolu] dans son premier post permet de rechercher plus facilement une solution... ;)
Hors ligne
#10 Le 26/05/2011, à 18:20
- pem1664
Re : [Résolu]probleme script pour relance connexion ppp
Je viens de tenter
echo $?
si je ne rentre pas de commande avant ca donne 255, donc j'en conclu que le code de sortie est sur 8 bits, si je rentre un ping correct en effet, j'ai 0 sinon 1, le $? c'est pour avoir le code de sortie d'une commande en fait?
Ah lala, une question amène une réponse qui amène une foule d'autre questions...
Pas de problème sans solutions, mettre [résolu] dans son premier post permet de rechercher plus facilement une solution... ;)
Hors ligne
#11 Le 26/05/2011, à 18:24
- FRUiT
Re : [Résolu]probleme script pour relance connexion ppp
Tout à fait, oui.
Evidemment ça n'a de sens qu'après avoir exécuté une commande.
Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean
Hors ligne
#12 Le 26/05/2011, à 18:30
- pem1664
Re : [Résolu]probleme script pour relance connexion ppp
Merci pour tout FRUIT, je crois qu'apres avoir compris ca, je comprendrais mieux certains scripts On peux s'en servir de tampon pour tout type de /dev/null? ou c'est strictement réservé? (en meme temps je vais commencer par faire un pti coup de google avant de trop t'embeter avec mes questions.. )
Dernière modification par pem1664 (Le 26/05/2011, à 18:31)
Pas de problème sans solutions, mettre [résolu] dans son premier post permet de rechercher plus facilement une solution... ;)
Hors ligne
#13 Le 26/05/2011, à 18:34
- FRUiT
Re : [Résolu]probleme script pour relance connexion ppp
/dev/null est limité par quoi? on peux ecrire ce qu'on veux dedans?
Tout résultat d'une commande, tout comme dans un fichier quelconque.
en gros ca sert de tampon mais comment est il vidé? a la fin du script? a la fin de la commande qui l'utilise?
Ben c'est comme un fichier constamment vide, dont on a pas à se soucier, justement c'est fait pour.
ls -l /dev/null
Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean
Hors ligne
#14 Le 26/05/2011, à 19:35
- pem1664
Re : [Résolu]probleme script pour relance connexion ppp
:S euh... ok mais alors si c'est constament vide, on ne peux pas récuperer ce qui est dedans donc dans
if ping -c2 $adresse >/dev/null 2>&1; then
echo "Ping réussi"
else
echo "Ping échoué"
fi
la c'est le résultat implicite du if (0 ou 1) qui donne le résultat (then ou else)
et la
ping -c2 $adresse >/dev/null 2>&1
if [ $? -eq 0 ]; then
echo "Ping réussi"
else
echo "Ping échoué"
fi
c'est le pointeur ? qui enregistre l'etat de sortie de la derniere commande effectué et dans tous les cas le résultat du ping est oublié?
C'est bien ca?
Edit : Bah, je crois que j'ai compris, un grand merci, j'aurais découvert $? et /dev/null ce soir donc /dev/null pour envoyer tout ce dont on a pas besoin mais qui donne un résultat accessible par $? et hop un peu moins bete d'un coup
Dernière modification par pem1664 (Le 26/05/2011, à 19:54)
Pas de problème sans solutions, mettre [résolu] dans son premier post permet de rechercher plus facilement une solution... ;)
Hors ligne
#15 Le 28/05/2011, à 08:13
- pem1664
Re : [Résolu]probleme script pour relance connexion ppp
Hello FRUIT si tu repasses par la, je suis tombé sur ce lien en cherchant pour /dev/null http://forum.ubuntu-fr.org/viewtopic.php?id=449363 et merci pour le lien pour la doc abs-5.3.pdf. Comme tu dis, "a garder sous le coude"!
Pas de problème sans solutions, mettre [résolu] dans son premier post permet de rechercher plus facilement une solution... ;)
Hors ligne
#16 Le 28/05/2011, à 10:08
- FRUiT
Re : [Résolu]probleme script pour relance connexion ppp
Je l'avais oublié ce thread ^^
De rian et bonne continuation.
[EDIT] Si tu veux un peu plus de doc tu peux lire aussi :
http://ss64.com/bash/
http://mywiki.wooledge.org/BashPitfalls
http://mywiki.wooledge.org/CategoryShell
http://wiki.bash-hackers.org/doku.php?id=start
Dernière modification par FRUiT (Le 28/05/2011, à 10:17)
Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean
Hors ligne
#17 Le 28/05/2011, à 10:28
- pem1664
Re : [Résolu]probleme script pour relance connexion ppp
Merci, j'y jetterai oeil (des que j'aurais fini les 716 pages de l'abs-5.3)
edit : très bien fait en tt cas ce pdf, très pédagogique, plein d'exemples impec!!
Dernière modification par pem1664 (Le 28/05/2011, à 11:01)
Pas de problème sans solutions, mettre [résolu] dans son premier post permet de rechercher plus facilement une solution... ;)
Hors ligne