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 25/05/2011, à 09: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, à 11: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, à 11: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, à 11: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! smile


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, à 11: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, à 21: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 wink


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, à 17: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, à 17: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, à 18: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, à 18: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 smile

Dernière modification par FRUiT (Le 26/05/2011, à 19: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, à 19: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, à 19: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... tongue


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, à 19: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, à 19: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 smile 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.. wink )

Dernière modification par pem1664 (Le 26/05/2011, à 19: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, à 19:34

FRUiT

Re : [Résolu]probleme script pour relance connexion ppp

pem1664 a écrit :

/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.

pem1664 a écrit :

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, à 20: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 smile donc /dev/null pour envoyer tout ce dont on a pas besoin mais qui donne un résultat accessible par $? smile et hop un peu moins bete d'un coup big_smile

Dernière modification par pem1664 (Le 26/05/2011, à 20: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, à 09: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, à 11: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, à 11: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, à 11: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) big_smile
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, à 12:01)


Pas de problème sans solutions, mettre [résolu] dans son premier post permet de rechercher plus facilement une solution... ;)

Hors ligne