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

остановить Linux от отправки мне ошибок cron по электронной почте?

Сегодня я настраиваю ssmtp для отправки мне электронной почты из sendmail. Однако я не ожидал, что такие приложения, как cron, будут отправлять мне электронные письма.

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

From: Root
Subject: Cron <root@myserver> /path/scripts/mysqlbackup.sh
mkdir: cannot create directory `2010': File exists
mkdir: cannot create directory `09': File exists

Как мне это остановить? Он просуществовал всего час, поэтому, если это единственная ошибка, я просто исправлю скрипт.

В качестве альтернативы перенаправлению вывода скрипта вы можете изменить место назначения почты для файла crontab, установив MAILTO, например. MAILTO=nobody

По умолчанию cron отправляет вам выходные сообщения задания cron. В частности, он сохраняет stdout (стандартный вывод) и stderr (стандартный вывод ошибок) задания cron и отправляет его по электронной почте владельцу crontab или пользователю, указанному в переменной MAILTO в crontab.

Чтобы выходные данные не доходили до вас, вы должны убедиться, что stdout и stderr не сохраняются, а записываются в файл или / dev / null.

Вы можете сделать это, используя что-то вроде этого в своем определении должности:

job.sh > /dev/null 2>&1

Это перенаправляет stdout на / dev / null (часть '> / dev / null') и перенаправляет stderr на stdout, а значит, и на / dev / null (часть '2> & 1'). Странный синтаксис, правда? ;-)

В Расширенное руководство по сценариям Bash имеет намного больше информация о перенаправлении ввода / вывода.

В качестве альтернативы, вы можете оставить MAILTO пустым (то есть определить MAILTO = "" в вашем crontab), и вы не получите никакой почты, согласно справочной странице vixie-cron на RHEL4 и RHEL5.

Устраните проблему, а не уведомление,

У вас возникнет дурная привычка просто отправлять все уведомления в> / dev / null, и, если это так, вы пропустите что-то важное.

добавить > /dev/null 2>&1 & до конца команды

например

/directory/script.sh > /dev/null 2>&1 &