В моем 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