У меня есть новая установка Ubuntu 12.04.1 LTS на несколько серверов.
Я не добавил никаких заданий cron или не редактировал мой crontab на этих серверах, однако примерно в то же время для на каждой машине я получаю 75% -ный всплеск процессора и следующую информацию в моем syslog во время всплеска:
CRON[8380]: (CRON) info (No MTA installed, discarding output)
У меня есть моно-комплект и я запускаю веб-сервер стека служб.
Каков наилучший способ остановить это? Я хотел бы иметь возможность удалить всплеск процессора.
Это происходит потому, что ваши задания cron создают выходные данные, а затем демон cron пытается отправить вам этот вывод (т. е. root). Если вам не нужен этот вывод, самый простой способ решить это - отбросить его в crontab:
sudo crontab -e
и добавить >/dev/null 2>&1 к каждому заданию:
* * * * * yourCommand >/dev/null 2>&1
В моем случае сообщение было намеком на проблему с разрешениями с bash-скриптом, но я не мог его увидеть, пока не установил MTA.
Как я предположил, я побежал:
[ f1]Я выбрал «Local» во время установки и после запуска задания cron снова:
sudo tail -f /var/mail/<user>
В моем случае я заменил
<user>
на «root».
Тогда я смог увидеть вывод ошибки, относящийся к разрешениям.
В crontab добавить это как первую строку:
MAILTO=""
Это предотвратит попытку cron отправить электронное письмо.
Если вы не хотите устанавливать 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
Как было сказано в более раннем ответе, это происходит из-за того, что ваши задания 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, если вы уверены, что вам не нужно его хранить.
Затем посмотрите файл журнала после работа выполняется.
Один побочный эффект добавления /dev/null 2>&1 в команду задания cron заключается в том, что он будет отбрасывать как STDERR, так и STDOUT (стандартная ошибка, а также вывод). Это прекрасно работает, если вы не хотите получать электронные письма от cron. Но если вы хотите, чтобы ваши ошибки были отправлены вам по электронной почте, вместо этого используйте >/dev/null. Прочитайте это сообщение в блоге для более подробного объяснения.
Вам все равно нужно установить MTA (агент передачи сообщений), чтобы отправить сообщения об ошибках. Postfix достаточно прост для установки с помощью: sudo apt-get install postfix
Это старый вопрос, но есть дополнительный ответ, который пригодится в некоторых случаях.
Выполните вывод вашей команды 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
Вы можете установить переменную MAILTO=”” в начале вашего файла crontab. Это также отключит оповещение по электронной почте. Редактировать / открыть задания cron:
$ crontab -e
В верхней части файла введите:
MAILTO=""
https://www.cyberciti.biz/faq/disable- заместитель по почте уведомление-по-кронтаб-команды /