Подтвердить что ты не робот

Cron отправляет электронное письмо с помощью STDERR, но не STDOUT?

У меня есть скрипты python, которые работают ежедневно в cron. Как я могу отправить cron по электронной почте ТОЛЬКО, КОГДА НАХОДИТСЯ STDERR OUTPUT из моего script? Я хочу, чтобы иметь возможность отправлять несколько получателей, и установить строку темы индивидуально для каждой записи cron.

Я пробовал это:

./prog > /dev/null | mail . . . 

но это не сработало - я все равно получаю пустые письма, когда нет STDERR. Нужно ли это делать в самой script?

Извините, если это кажется основным, у меня много googled, но я не могу найти ответ на этот вопрос.

4b9b3361

Ответ 1

Тест файла -s скажет вам, существует ли файл и имеет размер больше нуля.

./prog >/dev/null 2>some/file ; if [ -s some/file ] ; then mail < some/file ; fi

Ответ 2

Для cron вам не нужно прокладывать почту через почту. Демон cron автоматически отправит вам любой вывод вашей команды. Ваша запись crontab должна выглядеть так:

# every minute
* * * * * ./prog >/dev/null

Если нет вывода STDERR, вы не получите никакой почты.

Ответ 3

Вы задаете неправильный вопрос. Когда вы используете почту (1) для отправки электронной почты, это уже не актуально, что ее в cron. То, что вам действительно нужно, - это передать stderr в stdin почты. Нормальная труба от stdout до stdin, поэтому самый простой способ решить это - перенаправить:

{ /prog > /dev/null ; } 2>&1 | mail ...

Или менее понятным образом из-за запутанного порядка перенаправления:

/prog 2>&1 > /dev/null | mail ...

Ответ 4

mail v1.6 имеет возможность не отправлять сообщения с пустым телом:

 -E      Do not send messages with an empty body.  
         This is useful for piping errors from cron(8) scripts.

Это может быть то, что вы ищете.

Ответ 5

Есть хороший инструмент под названием cronic, который делает это. Он является частью пакета moreutils.

Ответ 6

Если ваш SCRIPT имеет команды, которые могут вызывать STDERR, на который вы хотите получать уведомление, вам необходимо использовать вызов mail или mailx внутри самого SCRIPT (если затем еще или). Задачи cron STDOUT и STDERR являются ТОЛЬКО для задания cron EXECUTION STDOUT и STDERR. hkmaly имел это прямо на n