IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Récupération du code retour dans ssh


Sujet :

Shell et commandes GNU

  1. #1
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 49
    Points : 26
    Points
    26
    Par défaut Récupération du code retour dans ssh
    Bonjour à vous les gurus !

    pour automatiser le backup de l'image système des mes serveurs linux (toutes distributions confondues), j'utilise ssh avec la commande suivante depuis le serveur de sauvegarde:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ssh -l root $serveur "tar czOPp --same-owner --exclude /proc --exclude /var/cache --exclude /tmp --exclude /sys/devices --exclude /poubelle --exclude /var/mail --exclude /var/lib --exclude /var/spool --exclude /var/log /  | nc -w 5 serveur port"
            RC=$?
    Mais de cette manière, le ssh ne renvoie que le code retour de la dernière commande effectuée, à savoir "| nc -w 5 serveur port" dans ce cas.
    Or je souhaiterais récupérer le code retour de la commande tar pour ensuite envoyer un mail en fonction de sa valeur.

    Et bien sûr je ne sais pas comment faire ...

    Avez-vous une solution à mon problème svp ?

    Merci d'avance pour vos éventuelles réponses ...

    Bruno

  2. #2
    Membre éprouvé
    Avatar de SnakemaN
    Profil pro
    Bidouille-tout Android
    Inscrit en
    Juillet 2006
    Messages
    871
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Bidouille-tout Android

    Informations forums :
    Inscription : Juillet 2006
    Messages : 871
    Points : 1 118
    Points
    1 118
    Par défaut
    En utilisant un fichier de log ?

    genre $ commande 1> warning.log 2>erreur.log a placer au bon endroit, si tu me met a la fin de ton pipe je suis pas sur que ça les fasse tous :/

    [edit] non en fait apres ton tar avant l'aute pipe, tu met un truc du genre :

    et dans ton fichier t'as le retour de tar

    [edit2] je vois que tu le met dans une variable, mais le tar est entre double quote, il ne doit pas etre entre simple quote inverse (AltGr + 7) pour être éxécuté ?

    [edit3]Trouvé tu le met après le nc, donc $? contient le retour de nc
    fait plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ssh -l root $serveur "tar czOPp --same-owner --exclude /proc --exclude /var/cache --exclude /tmp --exclude /sys/devices --exclude /poubelle --exclude /var/mail --exclude /var/lib --exclude /var/spool --exclude /var/log /  | RC=$? | nc -w 5 serveur port"
    C'est le signe d'un fou, qu'avoir honte d'apprendre
    Ubuntu 10.04 Lucid Lynx @home
    LE guide libre Linux & Ubuntu pour tous : Simple comme Ubuntu

  3. #3
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 49
    Points : 26
    Points
    26
    Par défaut
    J'ai déjà essayé comme ça, mais ça ne marche pas.

    J'ai fais aussi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ssh -l root $serveur "tar blablabla 2>out.err | nc blablabla"
    Sur le client je récupère bien un fichier "out.err" qui contient effectivement les erreurs générés par tar.

    Si je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ssh -l root $serveur "tar blablabla | nc blablabla" 2>out.err
    j'obtiens en local sur mon serveur un fichier "out.err" qui contient les erreurs générées par le ssh, mais pas celles du tar ...

    Je ne vois pas comment faire ...

    [EDIT] oups, désolé, j'ai répondu avant de lire tes edit ...
    Je regarde ce que tu as mis et je te tiens au courant ^^

  4. #4
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 49
    Points : 26
    Points
    26
    Par défaut
    Je ne comprends pas le sens de ce que tu as écrit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tar ..... | RC=$? | nc ....
    A quoi sert de piper une commande dans une variable ??

  5. #5
    Membre éprouvé
    Avatar de SnakemaN
    Profil pro
    Bidouille-tout Android
    Inscrit en
    Juillet 2006
    Messages
    871
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Bidouille-tout Android

    Informations forums :
    Inscription : Juillet 2006
    Messages : 871
    Points : 1 118
    Points
    1 118
    Par défaut
    A quoi te sert le RC=$? à récupérer la sortie d'une commande non ?
    Si tu le met a la fin, il te renvoie celui de la dernière commande, tu es d'accord ?
    Donc si tu le pipe en cours de route juste après le tar, il te stocke dans RC le retour de tar, c'est ce que tu veux, non ? tu peux aussi le mettre dans un fichier (echo $? > fichier)
    C'est le signe d'un fou, qu'avoir honte d'apprendre
    Ubuntu 10.04 Lucid Lynx @home
    LE guide libre Linux & Ubuntu pour tous : Simple comme Ubuntu

  6. #6
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 49
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par SnakemaN Voir le message
    A quoi te sert le RC=$? à récupérer la sortie d'une commande non ?
    Jusque là on est d'accord.
    Citation Envoyé par SnakemaN Voir le message
    Si tu le met a la fin, il te renvoie celui de la dernière commande, tu es d'accord ?
    Jusque là, on est toujours d'accord
    Citation Envoyé par SnakemaN Voir le message
    Donc si tu le pipe en cours de route juste après le tar, il te stocke dans RC le retour de tar, c'est ce que tu veux, non ?
    Là, nous ne sommes plus d'accord !! Ceci n'est pas une syntaxe acceptable en shell ... Le séparateur de commande en shell est le ";" et non le "|".
    Si je veux faire ce que tu dis, il faut écrire: tar ....; RC=$? ce qui est incompatible avec le " | nc ...."
    Citation Envoyé par SnakemaN Voir le message
    tu peux aussi le mettre dans un fichier (echo $? > fichier)
    Non ! Pour la même raison que ci-dessus, pour faire "echo $?>fichier.log, il faut mettre un ";" après le tar, ce qui est également incompatible avec le " | nc ..."

    Est-ce que je me trompe ?

  7. #7
    Membre éprouvé
    Avatar de SnakemaN
    Profil pro
    Bidouille-tout Android
    Inscrit en
    Juillet 2006
    Messages
    871
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Bidouille-tout Android

    Informations forums :
    Inscription : Juillet 2006
    Messages : 871
    Points : 1 118
    Points
    1 118
    Par défaut
    Effectivement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $ more toto
    ceci est un fichier\n
    $ rc=$?
    $ echo $rc
    0
    $ more toto | grep re
    $ rc=$?
    $ echo $rc
    1
    $ more toto | rc=$? | grep re
    $ echo $rc
    1
    Alors qu'il aurait du afficher 0 car more toto fonctionne....

    Sinon si tu est en ksh, regarde du coté des commande groupé dans un shell avec les accolades.
    Je regarde aussi , ça m'intrigue

    ou alors si mais faut la faire deux fois ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ { more toto; rc=$?; } ; more toto | grep re
    $ echo $rc
    0
    $
    C'est le signe d'un fou, qu'avoir honte d'apprendre
    Ubuntu 10.04 Lucid Lynx @home
    LE guide libre Linux & Ubuntu pour tous : Simple comme Ubuntu

  8. #8
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 49
    Points : 26
    Points
    26
    Par défaut
    Cela fait donc apparaitre 2 problèmes:

    - récupérer le code retour du tar sans interrompre la connexion au pipe
    - extraire ce code retour hors de la session ssh.

    Je ne peux pas executer 2 fois la commande comme tu le proposes car le tar prend déjà bcp de temps, ça voudrait dire que je double mes temps de sauvegarde ^^ Ce qui est impossible.

Discussions similaires

  1. Récupération du code retour d'un job dans un REXX
    Par zosuser dans le forum JCL - SORT
    Réponses: 4
    Dernier message: 31/10/2014, 14h32
  2. récupération du code HTML dans une zone de texte
    Par deubelte dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 26/01/2011, 23h25
  3. [batch] Récupération du code retour d'une commande
    Par fenrys_1 dans le forum Scripts/Batch
    Réponses: 6
    Dernier message: 06/03/2009, 18h05
  4. [MySQL] Récupération de code php dans une base de données
    Par kitana dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 21/03/2006, 00h25
  5. Execution programme et récupération du code retour
    Par Dr_GonZO dans le forum Langage
    Réponses: 5
    Dernier message: 12/07/2005, 15h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo