Сегодня я настраиваю 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 &