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

Перенаправить вывод crontab на электронную почту

Это выглядит просто, но как я могу перенаправить вывод такого типа crontab на мою электронную почту?

00 06 * * * /usr/bin/php /home/user/myapp/testing.sh -e prod 1>> /var/log/CRONLOGS/testing_prod.log 2>&1

Я пытался добавить MAILTO=myemail@email.com, но безрезультатно.

С уважением

Запись cron, которая у вас есть, перенаправляет оба STDOUT и STDERR в файл: /var/log/CRONLOGS/testing_prod.log.

Самый простой способ сделать то, что вы хотите, - запустить mailx в конце задания cron, используя косвенную ссылку для отправки этого файла:

00 06 * * * /usr/bin/php /home/user/myapp/testing.sh -e prod 1>> /var/log/CRONLOGS/testing_prod.log 2>&1; mailx -s "Cron output" me@example.org < /var/log/CRONLOGS/testing_prod.log

тем не мение: обратите внимание, что ваша работа cron добавление в файл журнала, поэтому, если он регулярно не очищается от старых записей (или не меняется), вы получите весь предыдущий вывод, а также новый вывод. Вероятно, было бы лучше создать небольшой сценарий оболочки для записи во временный журнал, отправить его по почте, а затем добавить в журнал почты:

#!/bin/sh
/usr/bin/php /home/user/myapp/testing.sh -e prod 1>> /tmp/testing_prod$$.log 2>&1
mailx -s "Cron output" me@example.org < /tmp/testing_prod$$.log
cat /tmp/testing_prod$$.log >> /var/log/CRONLOGS/testing_prod.log
rm /tmp/testing_prod$$.log

Это дает возможность crontab выглядят аккуратнее:

00 06 * * * /home/user/myapp/cronscript.sh