it-swarm-ru.tech

Как получить электронную почту от (неудачных) cron-заданий в Ubuntu?

Я создаю cron-задания в Ubuntu, поместив исполняемый файл в один из /etc/cron.{daily,hourly,monthly,weekly}. Есть много каталогов, начинающихся с cron:

[email protected]:~$ ls -ld /etc/cron*
drwxr-xr-x 2 root root 4096 2009-06-06 18:52 /etc/cron.d
drwxr-xr-x 2 root root 4096 2009-07-16 13:17 /etc/cron.daily
drwxr-xr-x 2 root root 4096 2009-06-06 18:52 /etc/cron.hourly
drwxr-xr-x 2 root root 4096 2009-06-06 18:52 /etc/cron.monthly
-rw-r--r-- 1 root root  724 2009-05-16 23:49 /etc/crontab
drwxr-xr-x 2 root root 4096 2009-06-06 18:52 /etc/cron.weekly

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

  1. Сценарий завершается неудачно и выдает код выхода, отличный от нуля.
  2. Сценарий есть что сказать мне

У меня SSMTP установлено и работает, я отправляю почту с моего Google-аккаунта. Тот факт, что SSMTP может отправлять почту только с использованием одной учетной записи, для меня не проблема. Это просто домашний сервер, и у меня нет пользователей, которые могут добавлять задания cron.

Я хотел бы знать, как рассылка из скриптов обычно работает в Linux/Unix вообще и в Ubuntu конкретно. Я также хотел бы узнать о хорошем способе получения писем в двух вышеупомянутых ситуациях.

46
Deleted

По умолчанию cron отправит электронное письмо владельцу учетной записи, под которой работает crontab.

Общесистемный crontab находится в/etc/crontab и работает под пользователем root

Поскольку root широко используется, я бы рекомендовал в любом случае добавить псевдоним root в ваш файл/etc/aliases. (запустить 'newaliases' после)

Нормальный способ структурировать это для псевдонима root для другого пользователя в системе, например для меня я бы использовал псевдоним "root" для "phil" (моя учетная запись пользователя) и псевдоним "phil" для моего внешнего адреса электронной почты.

Если у вас есть определенный пользовательский cron, который вы хотели бы отправить по электронной почте при выводе, вы можете снова использовать/etc/aliases (при условии, что у вас есть права суперпользователя), чтобы перенаправить пользователя на другой адрес электронной почты, или вы можете использовать следующее в верхняя часть вашего crontab:

MAILTO="[email protected]"

Если почта должна быть отправлена ​​локальному пользователю, вместо нее вы можете указать только имя пользователя:

MAILTO=someuser

Если вам нужна дополнительная информация, посмотрите crontab (5), выполнив:

man 5 crontab
62
Philip Reynolds

Чтобы получать электронную почту, отправленную с vixie cron, вам нужно что-то, что копирует команду sendmail. Так что установка postfix или SSMTP поможет разобраться с этой частью. Если вы используете postfix, тогда файл псевдонимов можно использовать для сопоставления пользователей системы с реальными адресами электронной почты.

Добавление MAILTO = "[email protected]" в начало crontab приведет к отправке любого вывода из задания cron. Это независимо от кода ошибки.

Для сценариев, которые правильно выводят ошибки в STDERR, легко получить по электронной почте, только если они ошибаются, просто сделайте это:

MAILTO="[email protected]"
0 5 * * * /bin/some_script > /dev/null

Это перенаправит только STDOUT на ноль. Если какие-либо сообщения STDERR присутствуют, они получат электронное письмо к вам.

Тем не менее, я обнаружил, что некоторые сценарии будут выводить ошибки неправильно как STDOUT и устанавливать код выхода равным 1. Я не нашел способа получить выходные данные из них, но игнорирую вывод, если код выхода равен 0. Единственный метод Я могу думать о том, чтобы перенаправить вывод в файл, а затем, если код выхода не равен 0, вывести этот файл для захвата cron. Кажется довольно ужасно, хотя.

29
Theozaurus

Если вы хотите отправить все выходные данные (stdout и stderr) на определенный адрес, вы можете использовать переменную MAILTO. Например, поместите следующее в верхней части скрипта.

MAILTO="[email protected]"
8
Dan Carley

попробуйте добавить "root: [email protected]" в/etc/aliases

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

Пока сценарий что-то выводит, вы получите письмо.

5
Daniel P

На всех моих производственных серверах, которые обычно запускают около 20 cronjobs ежедневно, я клянусь пакетом python-cronwrap. Проверьте это здесь: http://pypi.python.org/pypi/cronwrap . Это действительно легко настроить и, прежде всего, надежно.

3
Low Kian Seong

Я не думаю, что SSMTP соответствует вашим потребностям. Вам нужно что-то, что может "получать" почту от процессов cron, а затем отправлять ее в ваш реальный почтовый ящик.

Я использую Sendmail, но это потому, что я старая рука Sun; Я знаю, что все классные ребята в эти дни смеются над Postfix. Ваше сообщество Ubuntu может помочь вам настроить почтовую систему.

2
David Mackintosh

Альтернатива - я архивирую всю корневую почту на несколько файлов, а затем удаляю исходную почту.

Я cron сценарий (вот ключевая часть) -

#!/bin/bash
if `/usr/bin/mail -e`; then
   /usr/bin/mail --print 2>&1 > /tmp/email_${date +"%Y-%m-%d_%H.%M").log
   echo ‘d *’ | /usr/bin/mail -N > /dev/null
fi
exit 0

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

2
irdroid3