Bonjour,
J'ai un problème pour récupérer la sortie standard d'une commande lftp exécuté à partir d'un script shell sans avoir de soucis en exécutant cette même commande directement sur mon bash :
Lancement manuel :
~$ lftp -u 'user','passwd' ftp://x.x.x.x -e "set ssl:verify-certificate false ; mirror -e -n -P 3 / x.x.x.x/johndoe/ ; quit" > 'log/johndoe.log'
~$ cat log/johndoe.log
Total : 365 répertoires, 1050 fichiers, 0 liens symboliques
Si je lance « root@aaaaa:/srv/scripts# su -l -c "tk_lancement.sh" toto » qui contient :
....
TIMER="`date +"%y%m%d-%H%M%S"`"
echo "$TIMER lancement de [$commande]"
eval "$commande"
....
Dans les logs, la commande généré correspond bien à la commande passé à la main :
171025-152659 lancement de [lftp -u 'user','passwd' ftp://x.x.x.x -e "set ssl:verify-certificate false ; mirror -e -n -P 3 / x.x.x.x/johndoe/ ; quit" > 'log/johndoe.log']
Mais le fichier de logs « log/johndoe.log » reste désespérément vide.
Si quelqu'un a une idée, je suis preneur !
# ne serait-ce pas un problème de répertoire courant ?
Posté par vecounix . Évalué à 1.
le sous-répertoire "log" existe-t-il au moment où la commande est exécutée ?
[^] # Re: ne serait-ce pas un problème de répertoire courant ?
Posté par exae . Évalué à 1.
oui le sous-répertoire "log" existe avant le lancement de la commande.
# probleme de chemin et de droit ?
Posté par NeoX . Évalué à 2.
quand tu executes la commande via la ligne de commande tu es dans ton home
~$
quand tu executes le script tu es dans /srv/scripts, et en plus tu es root
et tu le lances avec
su -l toto -c "lacommande"
il est donc probable que le script cherche à ecrire dans /srv/scripts/log/johndoe.log
ce que l'utilisateur toto ne peut probablement pas faire (probleme de droit)
[^] # Re: probleme de chemin et de droit ?
Posté par exae . Évalué à 1. Dernière modification le 26 octobre 2017 à 11:20.
Merci je vais regarder cela :)
Pour info ,j'ai testé avec la commande ci-dessous, mais je n'obtiens que les commandes exécuté et pas le récultat final du genre "Total : 365 répertoires, 1050 fichiers, 0 liens symboliques" :
lftp -u 'user','passwd' ftp://x.x.x.x -e "debug -t -o 'log/johndoe.log' 3 ; set ssl:verify-certificate false ; mirror -e -n -P 3 / x.x.x.x/johndoe/ ; quit"
[^] # Re: probleme de chemin et de droit ?
Posté par exae . Évalué à 1.
Merci pour la réponse mais les fichiers sont bien sauvegardés dans le home de toto.
Il n'y a que quand je veux rediriger depuis un script le stdout vers un fichier que cela ne fonctionne pas.
Pour info ,j'ai testé avec la commande ci-dessous, mais je n'obtiens que les commandes exécuté et pas le résultat final du genre "Total : 365 répertoires, 1050 fichiers, 0 liens symboliques".
Les logs d'exécution sont bien présente dans "/home/toto/log/johndoe.log".
# buffering ?
Posté par vecounix . Évalué à 2.
https://serverfault.com/questions/139662/how-can-i-capture-output-from-lftp-output-not-written-to-stdout-or-stderr
[^] # Re: buffering ?
Posté par exae . Évalué à 1.
Merci, je vais regarder ça !
[^] # Re: buffering ?
Posté par exae . Évalué à 1.
Super ! "unbuffer lftp …" fait le job, je retrouve maintenant le stdout dans les logs.
Après avoir regarder un peu plus dans cette direction, il semble que "stdbuf -o0 lftp …" fonctionne aussi. L'avantage de stdbug, c'est qu'il est intégré à coreutils et ne nécessite pas de tcl.
[^] # Re: buffering ?
Posté par exae . Évalué à 1.
Après plusieurs tests, seul "unbuffer" fonctionne dans mon cas.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.