Petits problèmes avec Expect et les timeouts

Résolu/Fermé
VilainMelkor Messages postés 23 Date d'inscription jeudi 28 mai 2009 Statut Membre Dernière intervention 29 mars 2011 - 23 mars 2011 à 15:36
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 23 mars 2011 à 17:14
Bonjour,

Suite à mon précédent problème (https://forums.commentcamarche.net/forum/affich-21257877-scp-dans-un-script-shell-sans-utiliser-rsa ), et toujours dans l'idée de peaufiner mon cron de backup de serveur, je me retrouve confronté à une dernière difficulté avec la commande expect.

Pour rappel, voici mon script :
#!/usr/bin/expect -f

set force_conservative 1;
set timeout 3

set date [lindex $argv 0]

spawn scp -r /home/backup_global/$date/ admin@192.168.69.33:/share/MD0_DATA/BACKUP_SERVEUR/SERVERP01/
expect "Password:\n"
send -- "xxxxxxxx\n"

expect -gl "\\\[*]\$*"


J'arrive bel et bien à lancer une copie via scp en utilisant expect, mais je n'arrive pas a stopper convenablement le script à la fin de la copie.
En effet j'ai plusieurs fichiers à copier, et le script se coupe trop tôt (surement à cause du timeout), ne laissant pas le temps à scp de terminer la copie.
J'ai bien essayé expect "100%" à la fin du script, mais la copie dans ce cas s'arrête après le 1er fichier.
J'ai évidemment aussi essayé d'augmenter la durée du timeout avec set timeout 60, mais j'ai l'impression que chaque ligne de mon script attend cette durée là, expect n'envoie pas le mot de passe avant 1 minute par exemple...

Donc au final je me retrouve un peu perdu, surtout que le man expect est des plus violent ^^

Merci d'avance aux bonnes âmes ayant une piste pouvant m'aider.

PS : il y'a aussi les deux lignes suivantes que j'ai du mal à cerner, si je pouvais avoir une explication ça pourrait m'être utile :
set force_conservative 1;
expect -gl "\\\[*]\$*"



A voir également:

3 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 408
Modifié par zipe31 le 23/03/2011 à 17:05
Salut,

Concernant le timeout, un "timeout -1" devrait faire l'affaire (voir http://www.cotse.com/dlf/man/expect/timeout.htm)

Quant au "expect -gl "\\\[*]\$*"", ce n'est qu'une regex permettant de se protéger de caractères inatendus (http://www.cotse.com/dlf/man/expect/expect.htm)

Pour le "set force_conservative" je ne sais plus ;-((

Tiens un bon lien : http://oreilly.com/catalog/expect/chapter/ch03.html
Ainsi que : http://www.cotse.com/dlf/man/expect/index.htm

Zen my nuggets ;-)
Faites un geste pour l'environnement, fermez vos fenêtres et adoptez un manchot.
0
VilainMelkor Messages postés 23 Date d'inscription jeudi 28 mai 2009 Statut Membre Dernière intervention 29 mars 2011 3
23 mars 2011 à 16:52
Merci encore de t'occuper de mon cas zipe ^^ et merci pour tes liens et explications.

Par contre le lien concernant timeout n'existe malheureusement pas.
De plus set timeout -1 (permettant d'attendre indéfiniment) réagit comme lorsque j'avais augmenté la durée du timeout, c'est à dire que le prompt pour le password attend indéfiniment et le script n'envoie pas le mot de passe.

J'ai du mal a comprendre pourquoi car je vois beaucoup d'exemples sur le net qui utilisent cette syntaxe.
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 408
23 mars 2011 à 17:12
J'ai réparé le lien, mauvaise interprétation du site ;-(

Je t'avoue que j'ai moi même bien du mal à comprendre la syntaxe d'expect et que son utilisation se résume à un ou deux script des plus basiques.

Comme tu le soulignes aussi, la page de man est des plus indigeste qui soit ;-((

Je n'ai pas 36000 liens en bookmark, et les quelques rares que j'ai (à part celui cotse) sont plus basés sur des exemples que sur des explications de chaque (ou quelques) directive ;-((

Si l'espagnol ne te rebute pas... http://www.linuxlots.com/~barreiro/spain/expect/

;-))
0
VilainMelkor Messages postés 23 Date d'inscription jeudi 28 mai 2009 Statut Membre Dernière intervention 29 mars 2011 3
23 mars 2011 à 17:13
Bon j'ai réglé mon problème en redéfinissant le timeout à -1 apres l'envoi du password, tout a l'air de marcher :

#!/usr/bin/expect -f

set force_conservative 1 ;
set timeout 1

set date [lindex $argv 0]

spawn scp -r /home/backup_global/$date/ admin@192.168.69.33:/share/MD0_DATA/BACKUP_SERVEUR/SERVERP01/
expect "Password:\n"
send -- "xxxxxxxx\n"

set timeout -1

expect "backup_mysql.tar.gz*100%"
exit 0


Merci encore, normalement j'arrête d'embêter CCM pour un petit moment maintenant =)
Bonne journée à tous.
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 408
23 mars 2011 à 17:14
Merci pour le retour ;-))

Bonne continuation.
0