Я создаю cron-job в Ubuntu, помещая исполняемый файл в один из /etc/cron.{daily,hourly,monthly,weekly}
. Есть много каталогов, начинающихся с cron:
kent@rat:~$ 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
Я хотел бы получать электронную почту из моих скриптов, когда:
у меня есть SSMTP Установлен и работает, отправляю почту из своего гугл-аккаунта. Тот факт, что SSMTP может отправлять почту только с одной учетной записи, для меня не проблема. Это просто домашний сервер, и у моих пользователей нет возможности добавлять cron-job.
Хотелось бы узнать, как обычно работает рассылка из скриптов в Linux / Unix в целом и в Ubuntu в частности. Я также хотел бы знать, как мне получать почту в двух вышеупомянутых ситуациях.
По умолчанию cron отправляет электронное письмо владельцу учетной записи, под которой запущен crontab.
Общесистемный crontab находится в / etc / crontab запускается под пользователем `root '
Поскольку root широко используется, я бы порекомендовал добавить псевдоним root в ваш файл / etc / aliases. (запустите "newaliases" после)
Обычный способ структурировать это - использовать псевдоним root для другого пользователя в системе, например для меня я бы использовал псевдоним «root» для «phil» (моя учетная запись пользователя) и псевдоним «phil» для моего внешнего адреса электронной почты.
Если у вас есть конкретный пользовательский cron, который вы хотите отправить вам по электронной почте на выходе, вы можете снова использовать / etc / aliases (при условии, что у вас есть доступ суперпользователя), чтобы перенаправить пользователя на другой адрес электронной почты, или вы можете использовать следующее в верхняя часть вашего crontab:
MAILTO="email@domain.com"
Если почта должна быть отправлена локальному пользователю, вы можете вместо этого указать только имя пользователя:
MAILTO=someuser
Если вам нужна дополнительная информация, см. Crontab (5), запустив:
man 5 crontab
Чтобы получать электронную почту от vixie cron, вам понадобится что-то, что копирует команду sendmail. Таким образом, установка postfix или SSMTP решит эту часть проблемы. Если вы используете postfix, то файл псевдонимов можно использовать для сопоставления пользователей системы с реальными адресами электронной почты.
Добавление MAILTO = "foo@bar.com" в начало crontab приведет к отправке по электронной почте любого вывода из задания cron. Это независимо от кода ошибки.
Для скриптов, которые правильно выводят ошибки в STDERR, их легко получить по электронной почте, только если они ошибаются, просто сделайте следующее:
MAILTO="foo@bar.com"
0 5 * * * /bin/some_script > /dev/null
Это перенаправит только STDOUT на null. Если присутствуют какие-либо сообщения STDERR, они получат вам электронное письмо.
Тем не менее, я обнаружил, что некоторые сценарии выводят ошибки неправильно как STDOUT и устанавливают код выхода равным 1. Я не нашел способа получить вывод из них, но игнорирую вывод, если код выхода равен 0. Единственный метод Я могу думать о перенаправлении вывода в файл, а затем, если код выхода не равен 0, выведите этот файл для захвата cron. Хотя это выглядит довольно ужасно.
Если вы хотите отправить весь вывод (stdout и stderr) на определенный адрес, вы можете использовать MAILTO
переменная. Например, поместите следующее в верхней части скрипта.
MAILTO="address@example.com"
попробуйте добавить "root: your@email.address" в / etc / aliases
который отправит все сообщения для этого пользователя на вашу электронную почту. если вам не нужны все сообщения, вы можете создать пользователя специально для этого.
Пока сценарий что-то выводит, вы будете получать почту.
На всех моих производственных серверах, которые обычно запускают около 20 cronjobs в день, я использую пакет python-cronwrap. Посмотрите здесь: http://pypi.python.org/pypi/cronwrap. Его действительно легко настроить и, прежде всего, он надежен.
Я не думаю, что SSMTP подходит для того, что вам нужно. Вам нужно что-то, что может «получать» почту от процессов cron, а затем отправлять ее на ваш настоящий почтовый ящик.
Я использую Sendmail, но это потому, что я старый человек в Sun; Я знаю, что в наши дни над этим смеются все крутые ребята, использующие Postfix. Сообщество Ubuntu может помочь вам настроить вашу почтовую систему.
Альтернатива - я архивирую всю корневую почту в некоторые файлы, а затем удаляю исходную почту.
Я создаю скрипт (вот ключевая часть) -
#!/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
Так все будет в порядке, и я могу за этим следить. Я мог бы отправить по электронной почте ежедневный почтовый файл на внешний электронный адрес и т. Д.