Ошибка "(CRON) info (не установлен MTA, отбрасывается вывод)" в системном журнале

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

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

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

У меня установлен mono-complete, и я запускаю веб-сервер service stack.

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

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

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

sudo apt-get install postfix

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

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

sudo crontab -e

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

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

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

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

sudo aptitude install postfix

Я выбрал "Локальный" во время настройки и после повторного запуска задания cron:

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

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

<user>

с помощью "root".

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

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

crontab -e

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

0 3 * * * cmd  >> /some/log/файл 2>&1

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

0 3 * * * cmd1  >> /some/log/файл 2>&1;  cmd2  >> /some/log/файл 2>&1

или сгруппируйте их, как это:

0 3 * * * (cmd1;  cmd2)  >> /some/log/файл 2>&1

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

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

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

MAILTO=""

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

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

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

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

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

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

Вы можете просматривать журналы с помощью своего тега mycmd с помощью:

grep 'mycmd' /var/log/syslog

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

sudo crontab -e

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

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

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

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

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

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

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

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

$ crontab -e

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

MAILTO=""

https://www.cyberciti.biz/faq/disable-the-mail-alert-by-crontab-command/

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

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

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

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

    mail

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