Інформація про (CRON) (не встановлено MTA, відкидання виходу) »помилка в системі


198

У мене є нова установка Ubuntu 12.04.1 LTS на декількох серверах.

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

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

У мене встановлено моно-повне програмне забезпечення і я запускаю веб-сервер стека послуг.

Який найкращий спосіб для мене не допустити цього? Я хотів би мати можливість видалити сплеск процесора.


Щодня о 6:25? Це сценарії з /etc/cron.daily/. У мене є лише один, хто намагається надіслати пошту: популярність-конкурс. Подивіться, що ваші сценарії, і подивіться, який сценарій намагається надіслати пошту? Це повинно звузити його. Потім 'chmod 0644 /etc/cron.daily/script-name', щоб запобігти виконанню.

Відповіді:


173

Linux використовує пошту для надсилання сповіщень користувачеві. У більшості дистрибутивів Linux встановлено поштову службу (включаючи MTA). Ubuntu хоча.

Ви можете встановити поштову службу, наприклад, постфікс, щоб вирішити цю проблему.

sudo apt-get install postfix

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


5
Чи корисно встановити постфікс? Який MTA найпростіший у використанні?
ендоліт

2
postfix - це найпоширеніший поштовий сервер для Linux, дотримуйтесь його
Rápli András

5
Варто зазначити, що для використання з cron (тобто якщо ви не хочете фактично надсилати електронну пошту назовні) під час процедури встановлення, вам слід відповісти, щоб налаштувати лише для місцевого використання.
steffen

Єдиний спосіб, яким я знаю, щоб перевірити пошту, mailнадається mailutils(debian), якщо є кращий спосіб вбудований постфікс?
ThorSummoner

79

Це трапляється через те, що ваші завдання на роботі з cron дають вихід, і тоді демон cron намагається надіслати це повідомлення електронною поштою (тобто root). Якщо вам не потрібен цей вихід, найпростіший спосіб вирішити це - відкинути його на crontab:

sudo crontab -e

і додайте >/dev/null 2>&1до кожної роботи:

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

10
Проблема такого підходу полягає в тому, що він не пояснює високе використання процесора. Cron явно намагається бути комунікативним, і це, по суті, просто ігнорування результатів. Я б більше схильний обробляти вихід, ніж відкидати його, лише на випадок, якщо є корисна інформація про налагодження.
Олі

1
Олі, хоча це старе питання, я відчуваю те саме питання, але це стосується програми Raspberry PI. Я бачу купу No MTA installed, discarding outputповідомлення в журналі і моя програма врешті-решт перестає працювати самостійно. Я вважаю, це через сплеск процесора. Схоже, вся відповідь, розміщена на це питання, схоже, ігнорує це.
Чт

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

56

У моєму випадку повідомлення натякало на проблему дозволів із скриптом bash, але я не міг його побачити, поки не встановив MTA.

Як запропонував, я побіг:

sudo aptitude install postfix

Я вибрав "Local" під час налаштування та після запуску завдання cron:

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

У моєму випадку я замінив

<user>

з "коренем".

Тоді мені вдалося побачити вихід помилок, пов’язаний з дозволами.


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

32

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

crontab -e

(використовувати, sudoякщо проблема з crontab 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 )   >> / some / log / file 2> & 1

Якщо ви хочете ігнорувати stdout та захоплювати лише stderr, використовуйте замість цього. Покладіть файл журналу куди завгодно - свій домашній каталог, або навіть якщо ви впевнені, що вам не потрібно буде його зберігати.> /dev/null 2>> /some/log/file/var/log/tmp

Потім подивіться файл журналу після запуску завдання.


28

У crontab додайте це як перший рядок:

MAILTO=""

Це не дозволить cron намагатися надсилати електронну пошту.


4
Не залишайте жодних коментарів ( #) після MAILTO=""або не вийде
SBF

23

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

sudo crontab -e

то з вашою роботою з крон виглядатиме так.

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

тоді ви можете просто загорнути колоду і подивитися, що сталося

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

Це те, що я роблю на будь-якому сервері, і бачу це повідомлення в syslog


Я це зробив, але журнал не додається до файлу.
бенкет

Ви впевнені, що робота з кроном як запущена?
Ендрю Макнафтон

Так, системний журнал показує, що він запускається.
бенкет

1
Вам потрібно "2> & 1" в кінці рядка для збору результатів для stderr у файл.
MattSmith

15

Це давнє запитання, але є додаткова відповідь, яка корисна за деяких обставин.

Проведіть висновок своєї команди cron, loggerщоб вони опинилися в syslog.

Це трохи простіше, ніж встановити постфікс, і він виводить цей вихід у syslog поряд з іншими журналами. Ця команда буде фіксувати stdout AND stderr, тому ви не побачите No MTA installedповідомлення, а ви побачите весь результат у syslog.

Приклад запису крона:

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

Ви можете переглянути журнали зі своїм тегом, mycmdвикористовуючи:

grep 'mycmd' /var/log/syslog

Чи працюють труби на роботах з кроном?
CivMeierFan

10

Одним із побічних ефектів додавання /dev/null 2>&1до команди cron task є те, що вона відкине STDERRі STDOUT(Standard Error, і Output). Це добре працює, якщо ви не хочете отримувати електронні листи від cron. Але якщо ви хочете, щоб ваші помилки надсилалися електронною поштою, скористайтеся >/dev/nullнатомість. Прочитайте цю публікацію в блозі для отримання додаткових пояснень .

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


Наскільки я зрозумів, що "> / dev / null" буде надсилати їх лише, і "> / dev / null 2> & 1" видалить усі помилки? Що я повинен використовувати, щоб отримати помилки в журналі, але не надсилати пошту? Тепер я не отримую листи (як я хочу) , але некрасиво «немає MTA ...»
Яму

2
afaik, немає іншого способу зафіксувати вихід, окрім як надсилати його на електронні листи. Найближче, що ви можете зробити, - це встановити постфікс для доставки місцевої пошти (якщо ви запускаєте "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

Це якщо ви намагаєтеся змусити магенто запускатись на кішематику. Журнал покаже цю помилку на віртуальній машині:

потребує оновлення.

Вибачте, якщо ви втратили це, але це так працює. Ви продовжуєте губитися, але просто прочитайте про це, і твори зберуться одного дня. Будьте терплячі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.