Де записуються помилки cron?


170

Якщо я налаштував cronзавдання неправильно, вони, здається, мовчки виходять з ладу. Де слід шукати журнал помилок, щоб зрозуміти, що пішло не так?

Відповіді:


106

Як зазначали інші, cronнадішлемо вам електронну пошту з будь-якої програми, яку вона запускає (якщо є вихід). Отже, якщо ви не отримаєте жодного результату, в основному є три можливості:

  1. crond не міг навіть запустити оболонку для запуску програми або надсилання електронної пошти
  2. crond виникли проблеми з відправленням виводу, або пошта була загублена.
  3. програма не дала жодного результату (включаючи повідомлення про помилки)

Випадок 1. дуже малоймовірний, але щось треба було записати в журналах cron. Cron має власну зарезервовану систему syslog, тому вам слід заглянути /etc/syslog.conf(або еквівалентний файл у вашому дистрибутиві), щоб побачити, куди надсилаються повідомлення об'єкта cron. Популярні напрямки включають /var/log/cron: /var/log/messagesта /var/log/syslog.

У другому випадку слід ознайомитись з журналами демон демонів: повідомлення з демона Cron зазвичай з'являються як з root@yourhost. Ви можете використовувати MAILTO=...рядок у файлі crontab, щоб переслати електронною поштою електронну пошту на певну адресу, що полегшить отримання файлів журналів демонів mailer. Наприклад:

MAILTO=my.offsite.email@example.org
00 15 * * *  echo "Just testing if crond sends email"

У випадку 3 ви можете перевірити, чи дійсно програма запускалася, додавши іншу команду, ефект якої ви можете легко перевірити: наприклад,

00 15 * * * /a/command; touch /tmp/a_command_has_run

тож ви можете перевірити, чи crondсправді щось запущено, подивившись на mtime /tmp/a_command_has_run.


3
Ці файли також містяться у файлі? Я використовую спільний веб-хостинг і не думаю, що вони будуть знати, куди мені надіслати електронний лист.
Натан Лонг

3
Я вдячний поради у випадку 3, щоб перевірити, чи команда навіть запущена. У моєму випадку, cron не працював над моєю роботою, тому що я нещодавно змінив часовий пояс сервера і мені потрібно було перезапустити сервер cron, щоб він міг оцінити часи cron у відповідному часовому поясі.
Натан

1
Залежно від агента передачі пошти, ви також можете знайти недоставлену пошту у файлі, який викликається dead.letterв кореневому або відповідному домашньому каталозі користувача.
Даріо Сейдл

43

Ви завжди можете явно надіслати висновок завдання в файл журналу:

0 8 * * * /usr/local/bin/myjob > /var/log/myjob.log 2>&1

Майте на увазі, що це буде витісняти згадану раніше поведінку пошти, оскільки crond iself не отримає жодного результату із завдання. Якщо ви хочете зберегти таку поведінку, вам слід заглянути в трійник (1).


9
Чому б не використовувати >>замість >, щоб ви не перезаписували файл журналу кожен раз?
Кріс

Звичайно! Будь-яке перенаправлення вводу / виводу зробить, навіть | /usr/bin/loggerякщо ви хочете, як хитро запропонував Стефан. Виберіть свою отруту: tldp.org/LDP/abs/html/io-redirection.html
codehead

cron створив цей файл журналу myjob.logз розміром 0, як очікувалося, але він увійшов до іншого файлу, де я можу змінити це налаштування?
Бухгалтер,

42

Якщо ви не бачите електронної пошти, ви можете спам корінь @ yourcompany з помилками, які можуть дуже дратувати людей, які використовують цей обліковий запис для моніторингу. Спробуйте надіслати висновок замість Syslog:

*/5 * * * * yourcronjob 2>&1 | /usr/bin/logger -t yourtag

Потім зачекайте запуску cronjob і шукайте помилку в / var / log / messages (або /var/log/user.log у деяких системах).

Це чудово підходить для повідомлень про помилки, довжиною яких є лише 1-2 рядки, наприклад "yourcronjob: команда не знайдена". Він також використовує існуючу інфраструктуру системного журналу (Logrotation, центральний syslogging, Splunk тощо). Це також зменшує спам електронної пошти до root.

Це може бути не гарним рішенням, якщо ваша робота виконує сотні ліній виводу.


8

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

Це налаштування, яке можна налаштувати в деяких реалізаціях cron.


7

Ви повинні отримувати електронну пошту, crondколи завдання або не виконується, або коли завдання повертає ненульовий код виходу. Спробуйте ввести:

$ mailx

в командному рядку.

mailx(1)є основною програмою читання пошти у більшості кожної системи Unixlike. Це дуже примітивно за сучасними мірками, але ви можете майже розраховувати, що він завжди буде доступний. Можливо, доступні й інші, більш якісні поштові агенти, але їх достатньо, щоб ви ніколи не знали, який з них встановлений на якійсь випадковій машині, якою ви користуєтесь.

Зауважте, що якщо ви не налаштували свою систему як Інтернет-сервер електронної пошти, ця поштова підсистема використовується лише в межах машини. Ви можете надсилати електронну пошту та отримувати від інших користувачів на машині, але ви, можливо, не зможете надсилати електронну пошту у світ, і електронна пошта з навколишнього світу, безумовно, не зможе зайти на вашу машину.


5

Cron записує основну інформацію до /var/log/messages, але надсилає будь-яку програму виводу користувачеві, що викликає.


На /var/log/messagesмоєму сервері Ubuntu немає ( 4.4.0-128-generic #154-Ubuntu SMP). Будь-яка ідея чому? У Іви було кілька робочих місць, визначених у rootcrontab 's місяцями (наприклад apt autoremove), але жодна з них, здається, не була виконана.
Дан Даскалеску

2

Я наткнувся на цю нитку кілька років тому, відчуваючи ті самі проблеми, і зовсім недавно натрапив на рішення вищезгаданих випадків Рікардо. Відсутність електронної пошти важко виявити (як ви згадали), і ви, звичайно, не хочете спамувати свій root @ електронну пошту вашої компанії. Якщо ви зацікавлені, перегляньте deadmanssnitch.com. . Цей інструмент, здається, вирішує вищезазначені випадки. У використанні це здається досить простим - просто додайте біт коду, який інструмент надає вашій роботі. Якщо ваша робота не працює у вказаному внутрішньому, вам надійде сповіщення. Якщо робота знову почне працювати, ви також отримаєте сповіщення.


1

Я використовую vixie-cron, тому не знаю, чи це стосується всього. Але у мене є dead.letterфайл, який містить усі результати роботи.

У своїй /root/папці, crons.cronяку я встановив як свій crontab, запустивши crontab /root/crons.cron. dead.letterбуде створено /root/також.

Редагувати Я просто Google'd dead.letter, і це лист, який не можна доставити. Це, мабуть, не має нічого спільного з кроном. Якщо у вас неправильно налаштована пошта (як у мене), ви отримаєте файл.


0

Для новачків це може бути біль налагодження. Обов’язково не обмінюйтесь значеннями хвилини та години. Спочатку настає хвилина, потім година. Якщо ви подаєте значення менше 12 для кожного, він прийме їх, але може не працювати як очікувалося, ні зовсім.


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