"(CRON) info (Нет установки MTA, отбрасывание вывода)" ошибка в syslog

128

У меня есть новая установка Ubuntu 12.04.1 LTS на несколько серверов.

Я не добавлял никаких заданий cron или не редактировал свой crontab на этих серверах, однако примерно в то же время для каждой машины я получаю 75% -ный всплеск процессора и следующую информацию в моем syslog во время всплеска:

CRON[8380]: (CRON) info (No MTA installed, discarding output)

У меня есть моно-полный установлен и я запускаю веб-сервер стека служб.

Каков наилучший способ остановить это? Я хотел бы иметь возможность удалить всплеск процессора.

    
задан sungiant 27.11.2012 в 11:25
источник

9 ответов

122

Linux использует почту для отправки уведомлений пользователю. В большинстве дистрибутивов Linux установлена ​​почтовая служба (включая MTA). Ubuntu этого не делает.

Вы можете установить почтовую службу, например postfix, для решения этой проблемы.

sudo apt-get install postfix

Или вы можете игнорировать его. Я не думаю, что невозможность отправки сообщений cron имеет какое-либо отношение к шипу процессора (это связано с базовым заданием, выполняемым cron). Возможно, было бы безопаснее установить MTA, а затем прочитать сообщения ( mutt - хороший системный почтовый читатель).

    
ответ дан martin 01.01.2013 в 09:56
источник
56

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

sudo crontab -e

и добавьте >/dev/null 2>&1 к каждому заданию:

* * * * * yourCommand >/dev/null 2>&1
    
ответ дан rob 26.04.2013 в 12:27
источник
37

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

Как я предположил, я побежал:

sudo aptitude install postfix

Я выбрал «Local» во время настройки и после запуска задания cron снова:

sudo tail -f /var/mail/<user>

В моем случае я заменил

<user>

с "root".

Затем я смог увидеть вывод ошибки, относящийся к разрешениям.

    
ответ дан Martin Carstens 10.07.2015 в 16:28
источник
19

В crontab добавить это как первую строку:

MAILTO=""

Это предотвратит попытку отправки cron электронной почтой.

    
ответ дан 88weighed 27.08.2015 в 15:06
источник
16

Если вы не хотите устанавливать MTA (который мне сейчас не нужен), вы можете передать результаты задания cron в файл журнала.

sudo crontab -e

, тогда ваше задание cron будет выглядеть следующим образом.

0 3 * * * /cmd/to/run >> /var/log/somelogfile.log

, то вы можете просто закрыть журнал и посмотреть, что произошло

sudo tail -f -n 50 /var/log/somelogfile.log

Это то, что я делал на любом сервере, я вижу это сообщение в syslog

    
ответ дан Andrew MacNaughton 17.04.2016 в 21:37
источник
12

Как указано в более раннем ответе, это происходит потому, что ваши задания cron производят выходные данные, а затем демон cron пытается отправить вам этот вывод. Если вы не хотите (или не можете) установить MTA, но вы хотите увидеть результат, вы можете перенаправить вывод задания cron в файл журнала. Измените файл crontab с помощью

crontab -e

(используйте sudo , если проблема связана с crontab root) и добавьте >> /some/log/file 2>&1 после каждой команды, например:

0 3 * * * cmd  >> /some/log/file 2>&1

Если в строке имеется несколько команд, разделенные ; , && или || , вы должны сделать выше для каждой команды, например:

0 3 * * * cmd1  >> /some/log/file 2>&1;  cmd2  >> /some/log/file 2>&1

или сгруппируйте их, например:

0 3 * * * (cmd1;  cmd2)  >> /some/log/file 2>&1

Если вы хотите игнорировать stdout и захватывать только stderr, вместо этого используйте > /dev/null 2>> /some/log/file . Поместите файл журнала туда, где вы хотите - ваш домашний каталог, /var/log или даже /tmp , если вы уверены, что вам не нужно его хранить.

Затем просмотрите файл журнала после выполнения задания.

    
ответ дан G-Man 29.07.2016 в 04:40
источник
10

Один побочный эффект добавления /dev/null 2>&1 в команду задания cron заключается в том, что он будет отбрасывать как STDERR , так и STDOUT (стандартная ошибка, а также вывод). Это прекрасно работает, если вы не хотите получать электронные письма от cron. Но если вы хотите, чтобы ваши ошибки были отправлены вам по электронной почте, вместо этого используйте >/dev/null . Прочтите это сообщение в блоге для более подробного объяснения .

Вам все равно нужно установить MTA (агент передачи сообщений), чтобы отправить сообщения об ошибках. Postfix достаточно прост для установки с помощью: sudo apt-get install postfix

    
ответ дан paneer_tikka 30.12.2013 в 18:27
источник
8

Это старый вопрос, но есть дополнительный ответ, который пригодится в некоторых случаях.

Произведите вывод вашей команды cron через logger , чтобы они попали в syslog.

Это немного проще, чем установка postfix, и он выводит этот вывод в syslog вместе с другими вашими журналами. Эта команда будет захватывать stdout AND stderr, поэтому вы не увидите сообщение No MTA installed , и вы увидите все свои данные в syslog.

Пример записи cron:

0 3 * * * (cmd1;  cmd2) 2>&1 | logger -t mycmd

Вы можете просмотреть журналы с вашим тегом mycmd , используя:

grep 'mycmd' /var/log/syslog
    
ответ дан Michael Hunter 23.10.2017 в 00:44
источник
1

Вы можете установить MAILTO=”” в начале файла crontab . Это также отключит оповещение по электронной почте. Редактировать / открыть задания cron:

$ crontab -e

В верхней части файла введите:

MAILTO=""

Ссылка

    
ответ дан Damien Cuvillier 19.02.2018 в 06:18
источник

Ознакомьтесь с другими вопросами по меткам