stdout и stderr скрипта не перенаправляются при выполнении cron

2505
gletscher

./script & >> log.txt

Я получаю хороший лог-файл, но если у меня та же команда, выполняемая cron, допустим, что crontab выглядит так:

* * * * * '/home/user/script &>> /home/user/log.txt' 

log.txt будет просто пустым, я пробовал «и» и «и без галочек, чтобы заключить команду, есть идеи, почему потоки не будут записаны в файл?

3

2 ответа на вопрос

6
Dennis Williamson

Скорее всего, оболочка, которую использует cron, не поддерживает сокращенный оператор перенаправления, &>>который поддерживает Bash.

Вы должны использовать переносимую форму, которая поддерживается в оболочке Bourne и других:

* * * * * /home/user/script >> /home/user/log.txt 2>&1 

Это говорит «добавить стандартный вывод (дескриптор файла 1) к файлу и отправить стандартную ошибку (дескриптор файла 2) в то же место».

И вам не нужны кавычки.

+1 за перенаправление также std error! Неудивительно, что он ничего не выводит. User 7 лет назад 0
1
Jonathan Leffler
  1. Не включайте кавычки для команды в crontab.

  2. Подумайте о запуске сценария настройки среды, который выполняет свое собственное перенаправление, вместо того чтобы полагаться на cron.

По моему опыту, чем меньше в файле crontab, тем лучше. Мои файлы crontab состоят из элементов управления временем, а также простого абсолютного имени команды (ksh) и команды, которую нужно выполнить:

# @(#)$Id: crontab,v 4.2 2007/09/17 02:41:00 jleffler Exp $ # Crontab file for Home Directory for Jonathan Leffler (JL) #----------------------------------------------------------------------------- #Min Hour Day Month Weekday Command #----------------------------------------------------------------------------- 0 * * * * /usr/bin/ksh /work1/jleffler/bin/Cron/hourly 1 1 * * * /usr/bin/ksh /work1/jleffler/bin/Cron/daily 23 1 * * 1-5 /usr/bin/ksh /work1/jleffler/bin/Cron/weekday 2 3 * * 0 /usr/bin/ksh /work1/jleffler/bin/Cron/weekly 21 3 1 * * /usr/bin/ksh /work1/jleffler/bin/Cron/monthly 
Ваш пункт № 1 немного вводит в заблуждение (я полагаю, вы имеете в виду «Не указывайте всю команду»). * cron * обычно использует `/ bin / sh`, который, безусловно, способен обрабатывать кавычки, но кавычки OP использовались неправильно (аналогично, перенаправление не было * sh * совместимым). В некоторых версиях * cron * файлы crontab могут указывать, какая оболочка должна интерпретировать команды, поэтому можно использовать функции и синтаксис вашей любимой оболочки прямо в записи crontab. Хотя, конечно, я согласен с тем, что хранить записи в crontab просто - хорошее предложение. Chris Johnsen 14 лет назад 1
@ Крис: да - мое утверждение слишком широкое, и ваш анализ верен. Благодарю. Jonathan Leffler 14 лет назад 0

Похожие вопросы