Назад | Перейти на главную страницу

Crontab - отправка StdErr по электронной почте и stdOut в файл журнала

В моем crontab я пытаюсь отправить stdout в файл журнала и stderr в учетную запись электронной почты, используя настраиваемый заголовок темы.

Я пробовал много решений, но не достиг своей первоначальной цели, позвольте мне объяснить:

Первый способ: с помощью MAILTO

MAILTO=my.email@address.com
*/1 * * * * /my/script.sh > /my/file_stdout.log

Это отправляет стандартный вывод в файл журнала и сообщение об ошибке по электронной почте, но недостатком является то, что я не могу понять, как обновить тему электронного письма, и в результате у меня есть Тема: Cron /my/script.sh> /my/file_stdout.log.

Второй способ: по почте

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

*/1 * * * * /my/script.sh > /my/file_stdout.log 2>&1; [ $? != 0 ] && mail -s "Subject here" my.email@address.com < /my/file_stdout.log

другой :

*/1 * * * * /my/script.sh > /my/file_stdout.log 2>&1 || mail -s "Subject here" my.email@address.com < /my/file_stdout.log

другой :

*/1 * * * * /my/script.sh 2>&1 | tee /my/file_stdout.log | mail -s "Subject here" my.email@address.com < /my/file_stdout.log

другой:

*/1 * * * * OUTPUT=`/my/script.sh 2>&1` || echo "$OUTPUT" | mail -s "Subject here" my.email@address.com

Также заметил, что оператор or || не работает в моем crontab, я даже меняю оболочку crontab на / bin / bash (добавляя переменную SHELL = / bin / bash).

Я использую корпоративный сервер Redhat, и у меня нет доступа администратора, поэтому я не могу устанавливать такие инструменты, как хронический!

Я наконец заставил его работать и нашел проблему с || оператор, скрипт всегда возвращал код 0, поэтому теперь я явно добавил return в конце скрипта и теперь работают как положено:

*/1 * * * * (/my/script.sh > /my/file_stdout.log 2>&1) || mail -s "Subject here" my.email@address.com < /my/file_stdout.log