& ldquo; (CRON) info (MTA не установлен, отбрасывается выход) & rdquo; ошибка в syslog

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

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

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

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

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

1
задан 31 December 2013 в 05:32

8 ответов

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

sudo crontab -e

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

* * * * * yourCommand >/dev/null 2>&1
59
ответ дан 25 May 2018 в 03:55
  • 1
    Проблема с этим подходом заключается в том, что он не объясняет высокую загрузку процессора. Cron явно пытается быть коммуникабельным, и это по сути просто игнорирует выход. Я был бы более склонным обрабатывать вывод, чем отбрасывать его, на всякий случай, когда есть полезная информация об отладке. – Oli♦ 2 January 2014 в 20:39
  • 2
    Оли, хотя это старый вопрос, я испытываю тот же самый точный вопрос, но он находится на Малиновой ПИ. Я вижу в журнале сообщение No MTA installed, discarding output, и моя программа в конечном итоге перестает работать сама по себе. Я считаю, что это из-за всплеска процессора. Похоже, что все ответы на этот вопрос, похоже, игнорируют это. – ThN 18 January 2017 в 19:37
  • 3
    Чтобы сохранить вывод, поместите команду в скрипт, а stdout и stderr - в logger. Например, yourCommand >/dev/null 2>&1 | logger -t mycmd. Это приведет к выводу данных в syslog для безопасного хранения и прекратит жалобы MTA. – CivMeierFan 13 February 2018 в 04:03

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

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

[ f1]

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

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

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

<user>

на «root».

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

38
ответ дан 25 May 2018 в 03:55
  • 1
    Благодарим вас за дополнительный комментарий о том, как проверить почтовый ящик, чтобы увидеть ошибки с работы! – Stuart Allen 14 December 2016 в 18:08

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

MAILTO=""

Это предотвратит попытку cron отправить электронное письмо.

20
ответ дан 25 May 2018 в 03:55
  • 1
    Не оставляйте комментарии (#) после MAILTO="" или он не будет работать – SBF 29 March 2018 в 12:33

Если вы не хотите устанавливать 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

18
ответ дан 25 May 2018 в 03:55
  • 1
    Я сделал это, но в файл не добавлено никаких записей. – pir 6 August 2017 в 22:18
  • 2
    Вы уверены, что работа cron работает? – Andrew MacNaughton 7 August 2017 в 23:15
  • 3
    Да, системный журнал показывает, что он запускается. – pir 8 August 2017 в 00:14
  • 4
    Вам нужно «2 & gt; & amp; 1» в конце строки для вывода вывода в stderr в файл. – MattSmith 4 December 2017 в 04:33

Как было сказано в более раннем ответе, это происходит из-за того, что ваши задания 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, если вы уверены, что вам не нужно его хранить.

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

13
ответ дан 25 May 2018 в 03:55

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

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

10
ответ дан 25 May 2018 в 03:55
  • 1
    Насколько я понял, «& gt; / dev / null» будет отправлять их только, а «& gt; / dev / null 2 ​​& gt; & amp; 1» будет отключать все ошибки? Что я должен использовать для получения ошибок в журнале, но без писем? Теперь у меня нет писем (как я этого хочу), но уродливая «нет MTA ...» – Pit 5 February 2014 в 18:31
  • 2
    afaik, невозможно зарегистрировать вывод, кроме как отправить его на электронные письма. Самое близкое, что вы можете сделать, это установить постфикс для локальной доставки почты (если вы запустите «sudo apt-get install postfix» sudo apt-get, он предложит вам настроить локальную доставку. Хотя это первоначально напоминало боль, это на самом деле работает намного лучше. Когда я вхожу в систему через ssh, я вижу новое сообщение на компьютере, если предыдущее задание не удалось. Я считаю его более удобным, чем проверка журнала. – paneer_tikka 7 February 2014 в 10:32
  • 3
    Я думаю, это может быть хорошо для меня. благодаря – Pit 14 February 2014 в 14:51

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

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

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

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

0 3 * * * (cmd1;  cmd2) 2>&1 | logger -t mycmd
[d4 ] Вы можете просматривать журналы с помощью своего тега mycmd, используя:

grep 'mycmd' /var/log/syslog
8
ответ дан 25 May 2018 в 03:55

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

$ crontab -e

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

MAILTO=""

https://www.cyberciti.biz/faq/disable- заместитель по почте уведомление-по-кронтаб-команды /

1
ответ дан 25 May 2018 в 03:55

Другие вопросы по тегам:

Похожие вопросы: