У меня есть свежая установка 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:
Как указано в предыдущем ответе, это происходит потому, что ваши задания cron выдают выходные данные, а затем демон cron пытается отправить вам эти выходные данные по электронной почте. Если вы не хотите (или не можете) устанавливать MTA, но хотите увидеть выходные данные, вы можете перенаправить выходные данные задания cron в файл журнала. Отредактируйте свой файл crontab с помощью
crontab -e
(использовать sudo если проблема связана с crontab root) и добавьте >> /some/log/файл 2>&1после каждой команды, вот так:
0 3 * * * cmd >> /some/log/файл 2>&1
Если в строке есть несколько команд, разделенных ;, && или ||, вы должны выполнить описанное выше для каждой команды, например:
Если вы хотите игнорировать stdout и захватывать только stderr, используйте > /dev/null 2>> /some/log/файл вместо. Поместите файл журнала туда, куда вы хотите — в свой домашний каталог,/var/log, или даже /tmp если вы уверены, что вам не нужно будет его хранить.
Затем просмотрите файл журнала после выполнения задания.
Это старый вопрос, но есть дополнительный ответ, который полезен в некоторых обстоятельствах.
Передайте выходные данные вашей команды cron через logger таким образом, они попадают в системный журнал.
Это немного проще, чем установка postfix, и он помещает этот вывод в системный журнал вместе с другими вашими журналами. Эта команда захватит stdout И stderr, так что вы не увидите No MTA installed сообщение, и вы увидите все свои выходные данные в системном журнале.
Пример записи cron:
0 3 * * * (cmd1; cmd2) 2>&1 | logger -t mycmd
Вы можете просматривать журналы с помощью своего тега mycmd с помощью:
Один побочный эффект добавления /dev/null 2>&1 к команде задания cron заключается в том, что она отбросит оба STDERR и STDOUT (Стандартная ошибка, а также выходные данные). Это прекрасно работает, если вам не нужны никакие электронные письма от cron. Но если вы хотите, чтобы ваши ошибки были отправлены вам по электронной почте, используйте >/dev/null вместо. Прочтите это сообщение в блоге для получения дополнительных объяснений.
Однако вам все равно потребуется установить MTA (агент передачи почты) для отправки сообщений об ошибках. Postfix достаточно прост в установке с помощью: sudo apt-get install postfix
Вы можете установить MAILTO=”” переменная в начале вашего crontab файл. Это также отключит оповещение по электронной почте. Редактировать/Открывать свои задания cron:
Каждый день в 6:25? Это скрипты из /etc/cron.ежедневно/. У меня есть только одна попытка отправить письмо: конкурс популярности. Просмотрите свои скрипты и посмотрите, какой скрипт пытается отправить почту? Это должно сузить круг поисков. Затем 'chmod 0644 /etc/cron.daily/script-name", чтобы предотвратить выполнение.