Damien447 Posté(e) le 30 avril 2014 Partager Posté(e) le 30 avril 2014 Bonjour, J'ai un script qui récupère des données sur un ftp... voici le script (c'est plus parlant): #!/bin/sh # # Synchronise deux répertoires en utilisant FTP HOST="*******" LOGIN="*******" PASSWORD="*******" LOCALDIR="/volume1/Films/TELECHARGEMENT/Nouveau" REMOTEDIR="/" EXCLUDED="*.*~" if lftp -c "set ftp:list-options -a; open ftp://$LOGIN:$PASSWORD@$HOST; lcd $LOCALDIR; cd $REMOTEDIR; mirror --delete --verbose --exclude-glob $EXCLUDED"; then sh /volume1/Films/TELECHARGEMENT/envoimail.sh; else echo "err" fi Et donc ce script est exécuter tous les jours a 12h avec un cron : 0 12 * * * * root sh /volume1/Films/TELECHARGEMENT/download.sh 1>> log.txt Donc mon soucis est que je souhaite donc récupérer les logs de téléchargement et les mettre dans un fichier txt et me les envoyer... Alors cela fonctionne quand je lance la cmd a la main mais pas en cron ? enfin la commande de téléchargement fonctionne j'ai bien les données mais soit j'ai pas de mails ou alors un mail vide avec un fichier de log vide. Une idée? Merci ps le script envoimail.sh fonctionne c'est juste une ligne de commande pour envoyer par mail le fichier de log. 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
CoolRaoul Posté(e) le 30 avril 2014 Partager Posté(e) le 30 avril 2014 Tu as oublié de déclarer le PATH dans ton script 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Damien447 Posté(e) le 30 avril 2014 Auteur Partager Posté(e) le 30 avril 2014 C'est à dire? 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
CoolRaoul Posté(e) le 30 avril 2014 Partager Posté(e) le 30 avril 2014 (modifié) C'est à dire? Il manque la ligne "PATH=" **edit** En cron, le shell n'exécute pas les profiles, se retrouve avec le PATH par défaut, et il ne peut pas deviner ou se trouve le binaire "lftp" Modifié le 30 avril 2014 par CoolRaoul 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Damien447 Posté(e) le 30 avril 2014 Auteur Partager Posté(e) le 30 avril 2014 Je met quoi dedans je suis assez perdu la... :/ 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
CoolRaoul Posté(e) le 30 avril 2014 Partager Posté(e) le 30 avril 2014 (modifié) Je met quoi dedans je suis assez perdu la... :/ Ca dépend ou se trouve la commande "lftp" sur ton NAS (ce n'est pas une commande standard DSM) Si c'est un package optware il y a de forte chances que ceci fonctionne: PATH=/opt/bin:/bin:/usr/bin Modifié le 30 avril 2014 par CoolRaoul 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Damien447 Posté(e) le 30 avril 2014 Auteur Partager Posté(e) le 30 avril 2014 Ah oui d'accord.. Mais en fait le script fonctionne avec le cron enfin j'ai bien mes fichiers qui se téléchargent mais le soucis est que j'ai l'impression que le "1>>" n'ecrit pas dans le log.. 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
CoolRaoul Posté(e) le 30 avril 2014 Partager Posté(e) le 30 avril 2014 (modifié) Et donc ce script est exécuter tous les jours a 12h avec un cron : 0 12 * * * * root sh /volume1/Films/TELECHARGEMENT/download.sh 1>> log.txt Tant qu'a faire, ajoute aussi la sortie d'erreur a ton log, ca sera mieux: remplacer 1>> log.txt par >>log.txt 2>&1 **edit** Autre chose, faudrait spécifier le chemin *complet* du fichier log, et le mieux est de faire ça *dans* le script en y ajoutant la ligne: exec >> /tmp/ftp_mirror.log 2>&1 Modifié le 30 avril 2014 par CoolRaoul 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Damien447 Posté(e) le 30 avril 2014 Auteur Partager Posté(e) le 30 avril 2014 C'est pour la sortie ecran ? 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
CoolRaoul Posté(e) le 30 avril 2014 Partager Posté(e) le 30 avril 2014 C'est pour la sortie ecran ? Sous unix il y a toujours *deux* sorties pour chaque process: la sortie standard (descripteur 1) et la sortie d'erreur (descripteur 2) la simple redirection (">" ou "1>") ne redirige que la première. 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Damien447 Posté(e) le 30 avril 2014 Auteur Partager Posté(e) le 30 avril 2014 Et cela devrait regler mon probleme? 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
CoolRaoul Posté(e) le 30 avril 2014 Partager Posté(e) le 30 avril 2014 (modifié) Et cela devrait regler mon probleme? Avec la double redirection ("> bidule" suivi de "2>&1") le fichier log contiendra l'intégralité des messages émis par ton script si c'est bien de ça qu'il s'agit. Modifié le 30 avril 2014 par CoolRaoul 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Damien447 Posté(e) le 30 avril 2014 Auteur Partager Posté(e) le 30 avril 2014 D'accord OK. Je teste et je reviens vous dire si cela a fonctionné.. Merci beaucoup.. 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Damien447 Posté(e) le 30 avril 2014 Auteur Partager Posté(e) le 30 avril 2014 (modifié) Autre chose, faudrait spécifier le chemin *complet* du fichier log, et le mieux est de faire ça *dans* le script en y ajoutant la ligne: exec >> /tmp/ftp_mirror.log 2>&1 J'ai deja mis le chemin complet par contre je vois pas se que tu veux dire : "le mieux est de faire ça *dans* le script " ******************** Enfin a quel niveau je dois/peux faire cela (rediriger les sorties) dans le script. Modifié le 30 avril 2014 par Damien447 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
CoolRaoul Posté(e) le 30 avril 2014 Partager Posté(e) le 30 avril 2014 J'ai deja mis le chemin complet par contre je vois pas se que tu veux dire : "le mieux est de faire ça *dans* le script " ******************** Enfin a quel niveau je dois/peux faire cela (rediriger les sorties) dans le script. en mettant la ligne "exec" que j'ai donnée dans le script (en début) 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Damien447 Posté(e) le 30 avril 2014 Auteur Partager Posté(e) le 30 avril 2014 Donc logiquement j'ai plus besoin de cela : 0 12 * * * * root sh /volume1/Films/TELECHARGEMENT/download.sh 1>> log.txt 2>$1 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
CoolRaoul Posté(e) le 30 avril 2014 Partager Posté(e) le 30 avril 2014 (modifié) Donc logiquement j'ai plus besoin de cela : 0 12 * * * * root sh /volume1/Films/TELECHARGEMENT/download.sh 1>> log.txt 2>$1 en effet **EDIT** petite astuce en prime, tel quel le script va *toujours* écrire dans le log. Si tu veux que la sortie continue à aller à l'écran lorsque tu l'exécute "à la main" remplace: exec >> /tmp/ftp_mirror.log 2>&1 par [ -t 0 ] || exec >> /tmp/ftp_mirror.log 2>&1 Le test préalable ("-t 0") à pour effet que la redirection ("exec >>") soit effectuée *uniquement* lorsque l'entrée standard n'est pas un terminal (ce qui est justement le cas en cron mais pas en ligne de commande). Modifié le 30 avril 2014 par CoolRaoul 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Damien447 Posté(e) le 30 avril 2014 Auteur Partager Posté(e) le 30 avril 2014 Cool merci tout fonctionne parfaitement.. MERCI!!!!! 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
gargaben Posté(e) le 11 janvier 2015 Partager Posté(e) le 11 janvier 2015 Salut, tu pourrais mettre en ligne le contenu du script permettant d'envoyer un mail en ligne de commande? Jusqu'à il y a peu, j'utilisais "nail" via ipkg, mais ça ne marche plus depuis les récentes mises à jour de DSM. Je suis preneur de la syntaxe permettant de faire cela avec des commandes natives de DSM. Merci d'avance 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Rejoindre la conversation
Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.