cron имеет простую и замечательную возможность направлять вывод выполняемых команд на почту. Вот сижу я, работаю, а cron занимается своими делами: обновляет библиотеки из svn, делает резервные копии баз данных, отсылает уведомление моим друзьям, чтоб они не забыли поздравить меня с Днем рождения... И все это происходит тихо и неслышно. Иногда просто забываешь о том, что у тебя бэкапится база данных, которая уже сто лет как переименована, а потому уже вовсе и не бэкапится. Еще хуже, если во время рассылки уведомления о ДР произошел тотальный и фатальный сбой. И тогда ты сидишь один, с тортом из крема и энного количества свечек, и недоумеваешь: почему же так вышло??? А вышло так потому, что вывод команды, содержащий в себе уведомление об ошибке, в лучшем случае остался только в логах, прочитать которые приходит мысль только после того, как День рождения был безвозвратно испорчен :-)
Итак, настраиваем отправку вывода команд на свой почтовый ящик!
Берем cron. Лучше его, конечно же, брать за crontab. Поэтому мы набираем в консоли:
$ crontab -e
Далее вверху файла добавляем такую строчку:
MAILTO = email@inter.net
Понятно, что адрес мы заменяем на свой собственный. Потому как лично мне ваши отчеты о выполненных кроном задачах почему-то совершенно не интересны. Для того, чтобы убедиться, что все работает, добавляем тестовую ежеминутную задачу для крона:
* * * * * echo 'Вот и наступило долгожданное время: ' ; date
Сохраняем файл, засекаем время (пару минут хватит), выкуриваем сигарету/чупа-чупс/печенюшку, целуем жену/ребенка/начальника и возвращаемся к любимому и ненавистному компьютеру, дабы проверить электронную почту.
Но... Писем нет! Если Вы продолжили читать, то, наверное, таки нет :-) Вероятно, причина в том, что наш sendmail любезно отправил письмо в папку /var/mail. Толку от такого письма не намного больше, чем от лог-файла. Что же делать? Настраивать систему пересылки писем.
В моем Debian Lenny (testing) утилиту sendmail заменяет exim4. Если у вас та же ситуация, то его, родимого, мы и будем настраивать. Но, для начала, давайте все-таки убедимся. Набираем в консоли:
$ stat /usr/sbin/sendmail
Если в первой строчке вывода команды вы видите следующее:
File: `/usr/sbin/sendmail' -> `exim4'
то приступаем к настройке exim.
Загвоздка вся в том, что exim у нас настроен так, что работает только с локальным хостом, и во внешний мир не суется. Нам же нужно отправлять письма на внешний адрес. В конфиги сегодня лезть не будем - упростим себе жизнь. Набираем в консоли:
$ sudo dpkg-reconfigure exim4-config
И поэтапно отвечаем на вопросы.
- На странице "Общий тип почтовой конфигурации" выбираем "интернет-сайт; прием и отправка почты напрямую, используя SMTP".
- Далее вводим "Почтовое имя" - введите имя свое компьютера.
- В поле "IP-адреса, с которых следует ожидать входящие соединения SMTP", вводим свой локальный адрес: 127.0.0.1. Если только вы не собираетесь организовывать публичный почтовый сервер. И ни в коем случае не оставляйте поле пустым. А то мало ли кто к вашему серверу подключится и что Вам пришлет ;-)
- В качестве имени домена назначения опять же введите название своей машины.
- Если у вас модемное подключение к интернету, то согласитесь с сокращением DNS-запросов до минимума.
Остальные поля оставляем незаполненные или выбранные по умолчанию.
Закончили настройку exim. Засекаем время (пару минут хватит), выкуриваем сигарету/чупа-чупс/печенюшку, целуем жену/ребенка/начальника и возвращаемся к любимому и ненавистному компьютеру, дабы проверить электронную почту. Пришла - поздравляю! Не пришла - примите мои соболезнования, а лучше напишите мне и попробуем разобраться вместе ;-) Кроме того, можно найти полезную информацию в статье о настройке различных MTA для отправки через внешний SMTP.
пятница, 1 февраля 2008 г.
Подписаться на:
Комментарии к сообщению (Atom)
Спасибо за пост
ОтветитьУдалитьизначально все работало, но при попытке добавить скрипт - перестало отправляться даже тестовые сообщения, поможете? Может быть можно что нить почитать кроме манов?
Давайте попробуем разобраться. Не могли бы Вы показать ваш файл заданий? Обратите внимания, чтобы в нем случайно не образовались лишние переносы строк.
ОтветитьУдалитьЧто касается литературы - я не стал бы советовать читать что-то еще. Конечно, когда нужен быстрый ответ на простой вопрос, Google несомненно рулит. Но если нужно разобраться более детально, то лучше обращаться к первоисточникам - т.е. к мануалам. В крайнем случае, если есть какие-то трудности с английским, можно поискать переводы мануалов.
Такое ощущение, что во время перерыва сигарета отбирается у жены, чупа-чупс - у ребенка, а печенюшка - у начальника, за что им потом и раздаются поцелуи :). Ну это лирическое отступление, а вообще у меня замечание. Изначально cron не подозревает о существовании $PATH и я бы рекомендовал для общего случая указывать абсолютные пути, то есть в данном случае echo заменить на /bin/echo, а date - соответственно на /bin/date.
ОтветитьУдалитьЗдравствуйте - по крону письмо пришло 1 раз - и все, но через ls | mail -s "Вывод команды" pupkin@mail.ru никак нехочет отправлять - команда проходит, но письмо неприходит.
ОтветитьУдалитьhttp://debback.blogspot.com/2008/03/blog-post.html
ОтветитьУдалитьВ обсуждении этой статьи Mak_s обратил внимание, что большинство серверов будут нещадно резать попытку отправить мыло с локалхоста. Я с такой проблемой не сталкивался, вероятно, потому что шлю на корпоративный почтовый сервер. Как побороть эту проблему - мне самому интересно было бы узнать. Может где-то в настройках exim можно указать, через какой smtp сервер нужно отсылать письма.
Если удастся решить проблему, прошу поделиться методом :-)
Попробовал отправить себе на gmail - дошло, как ни странно. А Вы пробовали заглядывать в лог экзима?
ОтветитьУдалить/var/log/exim4/mainlog
А не подскажите, нужно что бы почта не присылалась. Типа MAILTO="".
ОтветитьУдалитьВсе зависит от того, кем и зачем она посылается.
ОтветитьУдалить