Перенаправление вывода задания cron
У меня есть следующая запись в 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'
В результате я получаю вывод ./script/my_script.rb
в ./log/my_log.log
. Такое поведение желательно. Любопытно, что я также получаю вывод в своей местной почте. Мне интересно, как вывод моего script записывается по почте. Поскольку я перенаправляю вывод в файл журнала, я бы ожидал, что мое задание cron не будет выводиться, и, таким образом, я не получил бы почту, когда будет выполняться задание cron. Может ли кто-нибудь пролить свет на то, как почта может получить вывод ./script/my_script.rb
?
Ответы
Ответ 1
Ваш порядок перенаправления неверен. Stderr не перенаправляется в файл, а отправляется на stdout. Это то, что вы должны получать в своей почте.
Исправить перенаправление, изменив задание cron на:
0 5 * * * /bin/bash -l -c
'export RAILS_ENV=my_env;
cd /my_folder;
./script/my_script.rb > ./log/my_log.log 2>&1'
Ответ 2
Попробуйте заменить 2>&1
на > ./log/my_log.log
.
Ответ 3
Судя по этому ответу, вам просто нужно переключить порядок перенаправления:
0 5 * * * /bin/bash -l -c 'export RAILS_ENV=my_env; cd /my_folder; ./script/my_script.rb > ./log/my_log.log 2>&1'