/etc/cron.daily/foo: Отправить письмо конкретному пользователю вместо root?

13

Я использую CentOS 5.5.

У нас есть несколько cronjobs, хранящихся в /etc/cron.daily/. Мы бы хотели, чтобы электронная почта для некоторых из этих cronjobs шла на определенный адрес электронной почты, в то время как остальные электронные письма в /etc/cron.daily/ должны идти на адрес электронной почты по умолчанию (root @ localhost).

Cronjobs в /etc/cron.daily/ запускаются из файла / etc / crontab. / etc / crontab указывает поле 'MAILTO'. Могу ли я переопределить это, установив MAILTO в моем /etc/cron.daily/foo cronjob?

Какой лучший способ справиться с этим?

Стефан Ласевский
источник
Примечание для пользователей CentOS 6.5 (cronie): /etc/crontab не указывает значения по умолчанию.
Адам Монсен

Ответы:

13

Установка MAILTO=user@example.orgв /etc/cron.daily/fooне работает. Вывод скрипта не отправляется на user@example.org.

На странице http://www.unixgeeks.org/security/newbie/unix/cron-1.html также предлагается простое решение:

Файл /etc/cron.daily/fooтеперь содержит следующее:

#!/bin/sh
/usr/bin/script 2>&1 | mailx -s "$0" stefanl@example.org

Это отправит письмо на stefanl@example.org с темой, равной полному пути сценария (например /etc/cron.daily/foo).

Вот что Unixgeeks.org говорит по этому поводу:

Выход из cron

Как я уже говорил, выходные данные из cron отправляются по почте владельцу процесса или лицу, указанному в переменной MAILTO, но что, если вы этого не хотите? Если вы хотите отправить вывод кому-либо еще, вы можете просто направить вывод в команду mail. например

cmd | mail -s "Тема письма" пользователя

Иногда я хочу получать ошибки только от cronjob, а не от stdout, поэтому я использую этот трюк. Синтаксис может выглядеть неправильно на первый взгляд, но будьте уверены, он работает. Следующий cronjob отправит STDOUT в / dev / null, а затем обработает STDERR через конвейер.

doit 2>&1 >/dev/null | mailx -s "$0" stefanl@example.org

То же самое, но отправьте в системный журнал:

doit 2>&1 >/dev/null | /usr/bin/logger -t $ME

Также смотрите мой ответ на ServerFault для Cronjob stderr для файла и электронной почты

Стефан Ласевский
источник
6

Более элегантным решением будет использование /etc/cron.dнапрямую. Вместо того, чтобы использовать ваш скрипт /etc/cron.daily, поместите его где-то вроде, /usr/local/sbin/myscript.shа затем создайте файл /etc/cron.d/myscriptкак:

MAILTO=root,whomever@example.org
# run myscript.sh at 4:11 every day
11 4 * * * root /usr/local/sbin/myscript.sh

Это также дает вам гораздо больший контроль над работой; например, только в определенные дни недели и т. д. См. crontab(5)человека для получения дополнительной информации.

codebeard
источник
0

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

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

Удачи

Майкл Шоу
источник