«(CRON) информация (MTA не установлена, отбрасывается вывод)» ошибка в системном журнале


198

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

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

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

Я установил mono-complete и запускаю веб-сервер стека служб.

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


Каждый день в 6:25? Это скрипты из /etc/cron.daily/. У меня есть только одна попытка отправить письмо: популярность-конкурс. Посмотрите ваши сценарии и посмотрите, какой сценарий пытается отправить почту? Это должно сузить это. Затем 'chmod 0644 /etc/cron.daily/script-name', чтобы предотвратить выполнение.

Ответы:


173

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

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

sudo apt-get install postfix

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


5
Является ли postfix хорошей установкой? Какой MTA проще всего использовать?
Эндолит

2
postfix является наиболее широко используемым почтовым сервером для Linux, придерживайтесь его
Rápli András

5
Стоит отметить, что для использования с cron (то есть, если вы не хотите отправлять электронную почту на самом деле) во время процедуры установки, вы должны ответить, чтобы настроить только для локального использования.
Штеффен

единственный способ, которым я знаю, чтобы проверить почту, mailпредоставляется mailutils(debian), есть ли лучший способ, встроенный в postfix?
ThorSummoner

79

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

sudo crontab -e

и добавить >/dev/null 2>&1к каждой работе:

* * * * * yourCommand >/dev/null 2>&1

10
Проблема этого подхода в том, что он не объясняет высокую загрузку ЦП. Крон явно пытается быть общительным, и это, по сути, просто игнорирует результаты. Я был бы более склонен обрабатывать вывод, чем отбрасывать его, на случай, если есть полезная информация отладки.
Оли

1
Оли, хотя это старый вопрос, у меня точно такая же проблема, но это касается Raspberry PI. Я вижу кучу No MTA installed, discarding outputсообщений в журнале, и моя программа в конечном итоге перестает работать самостоятельно. Я полагаю, что это из-за скачка процессора. Похоже, что все ответы на этот вопрос, кажется, игнорируют это.
Thn

4
Чтобы сохранить вывод, поместите команду в скрипт, и передайте stdout и stderr в logger. Например, yourCommand >/dev/null 2>&1 | logger -t mycmd. Это поместит вывод в системный журнал для безопасного хранения и остановит жалобы MTA.
CivMeierFan

56

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

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

sudo aptitude install postfix

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

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

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

<user>

с "корнем".

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


3
Спасибо за дополнительный комментарий о том, как проверить почтовый ящик, чтобы увидеть ошибки с работы!
Стюарт Аллен

32

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

crontab -e

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

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

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

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

или сгруппировать их, вот так:

0 3 * * * ( cmd 1 ;   cmd 2 )   >> / некоторые / log / file 2> & 1

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

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


29

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

MAILTO=""

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


4
Не помещайте комментарии ( #) после, MAILTO=""иначе это не сработает
SBF

23

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

sudo crontab -e

тогда с твоим cron работа будет выглядеть так.

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

тогда вы можете просто хвост бревно и посмотреть, что случилось

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

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


Я сделал это, но в файл не добавлено ведение журнала.
пир

Вы уверены, что работа cron как запущена?
Эндрю

Да, системный журнал показывает, что он запускается.
пир

1
Вам нужно '2> & 1' в конце строки, чтобы записать вывод в stderr в файл.
MattSmith

15

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

Передайте выходные данные вашей команды cron, loggerчтобы они оказались в системном журнале.

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

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

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

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

grep 'mycmd' /var/log/syslog

Трубы работают в cron рабочих местах?
CivMeierFan

10

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

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


Насколько я понял, «> / dev / null» будет отправлять только их, а «> / dev / null 2> & 1» будет снимать все ошибки? Что я должен использовать, чтобы получить ошибки в журнале, но без писем? Теперь я не получаю письма (как я этого хочу), но уродливое «нет MTA…»
Pit

2
afaik, нет способа записать вывод, кроме как отправить его по электронной почте. Самое близкое, что вы можете сделать, это настроить postfix для локальной доставки почты (если вы запустите «sudo apt-get install postfix», он предложит вам установить локальную доставку. Хотя изначально это выглядело как боль, на самом деле это работает намного лучше. Всякий раз, когда я вхожу через ssh, я вижу новое электронное письмо на компьютере, если предыдущая работа не удалась. Я считаю это более удобным, чем необходимость проверять журнал.
paneer_tikka

2
  1. Сначала установите postfix, что может решить проблему

    sudo apt-get install postfix
    
  2. Если Ubuntu, вы можете редактировать crontabфайл

    sudo vim /etc/crontab
    
  3. Внимание , отредактируйте верхний файл , нет кода в первой строке , и введите

    MAILTO=root // current system user
    
  4. При выполнении cronлюбого задания , вы получите электронное письмо

    mail
    

1
Ваш ответ, кажется, хороший, но я не мог понять все инструкции. Может быть, вы можете улучшить это.
zx485


1

У меня была эта проблема с использованием инструментов Kitematic Docker .
Перейдите к контейнеру magento и нажмите exe.

Тогда беги

apt-get update

Это если вы пытаетесь заставить magento работать на kitematic. Журнал покажет эту ошибку на виртуальной машине:

Нужно обновить.

Извините, если это потеряло вас, но вот как это работает. Вы продолжаете заблудиться, но просто читайте об этом, и кусочки соберутся однажды. Потерпи.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.