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 :

[expect] comment boucler spawn si la commande échoue ?


Sujet :

Shell et commandes GNU

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 25
    Par défaut [expect] comment boucler spawn si la commande échoue ?
    Bonjour à tous,

    j'ai réalisé un script qui réalise en gros, les opérations suivantes avec expect:

    1-connexion en ssh sur une machine distante (spawn ssh -l utilisateur xxx.xxx.xxx.xxx
    2-envoi de la commande1 à la machine distante
    3-envoi de la commande2 à la machine distante
    ....

    j'ai deux petit soucis

    le premier, c'est que la connexion ssh peut échouer , du coup j'ai parfois ceci:

    ssh: connect to host xxx.xxx.xxx.xxx port 22: Connection refused

    et mon script s'arrete la ...
    comment faire pour qu'il re-essaye de se connecter tant qu'il n'y arrive pas ?

    l'autre probleme, moins compliqué je pense, et que je voudrais garder une trace de l'execution de ce script, un log quoi. comment faire ?

    Merci pour vos avis éclairés

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 716
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 716
    Par défaut
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    maFunc() {
       nc -w5 -z xxx.xxx.xxx.xxx 22 && {
          tes_commandes
       } || maFunc
    }
     
    maFunc
    ...
    ?

    sachant que si nc échoue (ta machine distante n'est pas joignable sur le port 22), on reprend le test par nc, et si nc réussit (la machine distante est joignale sur le port 22), alors tes commandes sont excutées.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 25
    Par défaut
    Merci N_BaH

    j'ai appris une commande

    par contre je vois pas comment passer un nom d'utilisateur et comment utiliser ma clef privée ssh avec nc ?

    il n'y a pas moyen de le faire avec expect ?, sachant que lorsque la connexion échoue, le script s'arrete brutalement.

    idéalement un truc qui detecte le message "ssh: connect to host xxx.xxx.xxx.xxx port 22: Connection refused" , qui arrete le script est le relance

    Merci

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 716
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 716
    Par défaut
    Citation Envoyé par threepwood
    par contre je vois pas comment passer un nom d'utilisateur et comment utiliser ma clef privée ssh avec nc ?
    nc va seulement scanner le port 22, si le port est disponible sur la machine distante, alors tes commandes (ssh user@distMach 'tes_commandes', ou expect (que je ne connais pas)) sont exécutées, sinon on recommence jusqu'à ce que nc sorte avec un code d'erreur à zéro, et tes commandes sont exécutées.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 25
    Par défaut
    rhaaa j'avais pas capté le fonctionnement de la chose

    c'est génial ! merci beaucoups N_BaH

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 25
    Par défaut
    mince j'ai un os...
    nc fonctionne a merveille, mais est-ce qu'on peut y passer un argument ?

    voila mon script.sh:

    maFunc() {
    nc -w5 -z xxx.xxx.xxx.xxx && {
    monscript2.sh $1
    } || maFunc
    }

    si j'appelle celui-vi par ./script.sh TOTO
    je voudrais que TOTO soit la variable correspondant à $1

    j'ai essayé à coup de NARGS, mais rien à faire, ca renvoi une chaine vide à chaque fois...

    Merci

  7. #7
    Membre très actif Avatar de unknow0
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 452
    Par défaut
    il faut les passer a ta function aussi

    au lieu de l'appeler maFunc tu fait
    maFunc $1


  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 25
    Par défaut
    arf, à force de chercher un truc compliqué ...
    ca marche.

    j'ai de nouvea un probleme, décidement, mon script fonctionne à merveille quand je le lance en ligne de commande sans aucune interraction de ma part.

    mais, si je met le script en crontab, il traite la partie jusqu'a la fonction nc, puis à priori, s'arrete.

    aucun message d'erreur dans les logs

    il n'y à pas d'interraction dans le script, je comprend pas.

  9. #9
    Membre très actif Avatar de unknow0
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 452
    Par défaut
    si le script doit écrire sur la sortie standard il se fera killer (vu qu'il n'y a pas de sortie standard) a moins de rediriger le flux.

  10. #10
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 716
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 716
    Par défaut
    par défaut, cron n'hérite d'aucune variable d'environnement :

    incorpore à ton cron le PATH qui ira bien...
    Code $EDITOR : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    PATH=/bin:
    etc
    pour avoir les commandes nécessaires s'exécuter...
    ?
    ou précède tes commandes de leur chemin absolu...
    ?

  11. #11
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 716
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 716
    Par défaut

    unknow0,

    si le script renvoie quoi que ce soit dans le pire des cas ce sera "mailé" à root...
    cron ne gère pas de "tueries"
    ...
    ?

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 25
    Par défaut
    trop simple...
    tout est ok, j'ai fini d'embeter la communauté avec ce script

    Merci encore pour votre aide.

  13. #13
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 966
    Par défaut
    Citation Envoyé par threepwood Voir le message
    trop simple...
    tout est ok, j'ai fini d'embeter la communauté avec ce script

    Merci encore pour votre aide.
    un dernier petit avis :

    en cas d'échec de nc, les tentatives de connexion auront lieu aussi vite que le script peut s'exécuter, ce qui n'est pas utile : si le réseau n'est pas disponible mieux faut attendre un peu (rajouter un sleep N, avant d'appeler à nouveau myFunc dans le || ... où N est le nombre de secondes à attendre avant de continuer…)

    et si après un certain temps le serveur distant n'est toujours pas disponible, il y a peut-être un problème plus sérieux dont il faudrait prévenir l'admin… (via un mail par exemple…)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment ouvrir une fénêtre de commande DOS
    Par izeba dans le forum Windows XP
    Réponses: 4
    Dernier message: 24/09/2006, 02h43
  2. Réponses: 9
    Dernier message: 11/09/2006, 17h22
  3. Comment lancer une ligne de commande dans un processus en Java.
    Par doyouknow56 dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 13/05/2006, 12h55
  4. [VB6] Comment boucler sur des controls d'un form ?
    Par lankviller dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 27/01/2003, 17h29

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