web-dev-qa-db-fra.com

Rediriger la sortie d'un travail cron

J'ai l'entrée suivante dans crontab:

0 5 * * * /bin/bash -l -c 'export Rails_ENV=my_env; cd /my_folder; ./script/my_script.rb 2>&1 > ./log/my_log.log'

Le résultat est que je reçois la sortie de ./script/my_script.rb dans ./log/my_log.log. Ce comportement est souhaité. Ce qui est curieux, c'est que je reçois également la sortie dans mon courrier local. Je me demande comment la sortie de mon script est capturée par mail. Étant donné que je redirige la sortie vers un fichier journal, je m'attendrais à ce que mon travail cron n'ait aucune sortie, et donc je ne recevrais aucun courrier lorsque le travail cron s'exécute. Quelqu'un peut-il nous éclairer sur la façon dont le courrier électronique peut obtenir la sortie de ./script/my_script.rb?

15
Michael Frederick

Votre ordre de redirection est incorrect. Stderr n'est pas redirigé vers le fichier, mais est envoyé à stdout. C'est ce que vous devez recevoir dans votre courrier.

Corrigez la redirection en changeant votre tâche cron en:

0 5 * * * /bin/bash -l -c
'export Rails_ENV=my_env;
cd /my_folder;
./script/my_script.rb > ./log/my_log.log 2>&1'
24
dogbane

Essayez d'échanger 2>&1 avec > ./log/my_log.log.

2
Ilya I

A en juger par cette réponse il vous suffit de changer l'ordre des redirections:

0 5 * * * /bin/bash -l -c 'export Rails_ENV=my_env; cd /my_folder; ./script/my_script.rb > ./log/my_log.log 2>&1'
1
Johannes