Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 16/03/2010, 17h57   #1
Invité régulier
 
Inscription : février 2003
Messages : 25
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 25
Points : 7
Points : 7
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
threepwood est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2010, 18h08   #2
Expert Confirmé
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 1 897
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 1 897
Points : 3 677
Points : 3 677
Code bash :
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.
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2010, 09h10   #3
Invité régulier
 
Inscription : février 2003
Messages : 25
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 25
Points : 7
Points : 7
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
threepwood est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2010, 09h28   #4
Expert Confirmé
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 1 897
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 1 897
Points : 3 677
Points : 3 677
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.
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2010, 09h51   #5
Invité régulier
 
Inscription : février 2003
Messages : 25
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 25
Points : 7
Points : 7
rhaaa j'avais pas capté le fonctionnement de la chose

c'est génial ! merci beaucoups N_BaH
threepwood est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2010, 10h44   #6
Invité régulier
 
Inscription : février 2003
Messages : 25
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 25
Points : 7
Points : 7
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
threepwood est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2010, 11h03   #7
Membre éprouvé
 
Avatar de unknow0
 
Homme
Inscription : juillet 2008
Messages : 381
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : juillet 2008
Messages : 381
Points : 424
Points : 424
Envoyer un message via Skype™ à unknow0
il faut les passer a ta function aussi

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

unknow0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2010, 12h05   #8
Invité régulier
 
Inscription : février 2003
Messages : 25
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 25
Points : 7
Points : 7
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.
threepwood est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2010, 12h13   #9
Membre éprouvé
 
Avatar de unknow0
 
Homme
Inscription : juillet 2008
Messages : 381
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : juillet 2008
Messages : 381
Points : 424
Points : 424
Envoyer un message via Skype™ à unknow0
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.
unknow0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2010, 12h14   #10
Expert Confirmé
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 1 897
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 1 897
Points : 3 677
Points : 3 677
par défaut, cron n'hérite d'aucune variable d'environnement :

incorpore à ton cron le PATH qui ira bien...
Code $EDITOR :
1
2
 
PATH=/bin:
etc
pour avoir les commandes nécessaires s'exécuter...
?
ou précède tes commandes de leur chemin absolu...
?
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2010, 12h17   #11
Expert Confirmé
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 1 897
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 1 897
Points : 3 677
Points : 3 677

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"
...
?
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2010, 12h43   #12
Invité régulier
 
Inscription : février 2003
Messages : 25
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 25
Points : 7
Points : 7
trop simple...
tout est ok, j'ai fini d'embeter la communauté avec ce script

Merci encore pour votre aide.
threepwood est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2010, 17h22   #13
Expert Confirmé
 
Homme
Inscription : septembre 2006
Messages : 2 255
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : septembre 2006
Messages : 2 255
Points : 2 685
Points : 2 685
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…)
JeitEmgie est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 01h21.


 
 
 
 
Partenaires

Hébergement Web