Aller au contenu

Featured Replies

Posté(e)

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.
Posté(e)

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é par CoolRaoul

Posté(e)

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é par CoolRaoul

Posté(e)
  • Auteur

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..

Posté(e)

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é par CoolRaoul

Posté(e)

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.

Posté(e)

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é par CoolRaoul

Posté(e)
  • Auteur

D'accord OK. Je teste et je reviens vous dire si cela a fonctionné..

Merci beaucoup.. :)

Posté(e)
  • Auteur

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é par Damien447

Posté(e)

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)

Posté(e)
  • Auteur

Donc logiquement j'ai plus besoin de cela :

0 12 * * * * root sh /volume1/Films/TELECHARGEMENT/download.sh 1>> log.txt 2>$1

Posté(e)

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é par CoolRaoul

  • 8 mois après...
Posté(e)

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

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.

Invité
Répondre à ce sujet…

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.