Forum Linux.debian/ubuntu lftp > output_file --> problème output_file vide

Posté par  . Licence CC By‑SA.
Étiquettes :
0
25
oct.
2017

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  . Évalué à 1.

    le sous-répertoire "log" existe-t-il au moment où la commande est exécutée ?

  • # probleme de chemin et de droit ?

    Posté par  . É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  . É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  . É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".

        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"
        
  • # buffering ?

    Posté par  . Évalué à 2.

    • [^] # Re: buffering ?

      Posté par  . Évalué à 1.

      Merci, je vais regarder ça !

      • [^] # Re: buffering ?

        Posté par  . É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  . É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.