it-swarm-ru.tech

Где регистрируются ошибки cron?

Если я неправильно настрою задания cron, они, по-видимому, завершатся сбоем. Где мне искать журнал ошибок, чтобы понять, что пошло не так?

182
Brian Lyttle

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

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

Случай 1. маловероятен, но что-то должно было быть записано в журналах cron. У Cron есть собственная зарезервированная утилита syslog, поэтому вам стоит заглянуть в /etc/syslog.conf (или эквивалентный файл в вашем дистрибутиве), чтобы увидеть, куда отправляются сообщения объекта cron. Популярные направления включают /var/log/cron, /var/log/messages а также /var/log/syslog.

В случае 2. вы должны проверить журналы демона почтовой программы: сообщения от демона Cron обычно появляются как от [email protected]. Вы можете использовать MAILTO=... строка в файле crontab, чтобы cron отправлял электронную почту на определенный адрес, что должно облегчить поиск журналов демона почтовой программы. Например:

[email protected]
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.

116
Riccardo Murri

Вы всегда можете явно отправить выходные данные задания в файл журнала:

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

Имейте в виду, что это заменит почтовое поведение, которое было упомянуто ранее, потому что crond iself не будет получать никаких результатов от работы. Если вы хотите сохранить такое поведение, вам следует заглянуть в тройник (1).

54
codehead

Если вы не видите почту, вы можете рассылать root @ yourcompany с ошибками, которые могут сильно раздражать людей, которые используют эту учетную запись для мониторинга. Попробуйте вместо этого отправить вывод в Syslog:

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

Затем дождитесь запуска cronjob и найдите ошибку в/var/log/messages (или /var/log/user.log в некоторых системах).

Это прекрасно работает для сообщений об ошибках длиной всего 1-2 строки, таких как "yourcronjob: команда не найдена". Он также использует вашу существующую инфраструктуру системного журнала (Logrotation, центральный системный журнал, Splunk и т.д.). Он также уменьшает спам электронной почты до корня.

Это не может быть хорошим решением, если ваш cronjob генерирует сотни строк вывода.

44
Stefan Lasiewski

Вы должны получать электронную почту от crond, когда задание либо не выполняется, либо когда задание возвращает ненулевой код завершения. Попробуйте набрать:

_$ mailx
_

в командной строке.

mailx(1) - это базовая программа чтения почты в большинстве Unix-подобных систем. Он очень примитивен по современным стандартам, но вы всегда можете рассчитывать на его доступность. Другие, более качественные почтовые агенты могут быть доступны, но их достаточно, чтобы вы никогда не знали, какой из них установлен на какой-то случайной машине, которую вы используете.

Обратите внимание, что если вы не настроили свою систему в качестве сервера электронной почты в Интернете, эта почтовая подсистема используется только внутри компьютера. Вы можете отправлять электронную почту и получать от других пользователей на машине, но вы не сможете отправлять электронную почту по всему миру, и электронная почта из внешнего мира, безусловно, не сможет прийти на вашу машину.

8
Warren Young

Конфигурация cron по умолчанию отправит вам письмо с выводом вашей программы. Если это не удастся, вы можете попробовать обернуть свою неудачную программу в сценарий оболочки, который гарантирует, что программа не завершится сбоем, и вы можете дополнительно записать результаты.

Это настраиваемый параметр в некоторых реализациях cron.

8
miguel.de.icaza

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

5
Hemant

Я наткнулся на эту тему несколько лет назад, испытывая те же проблемы, и совсем недавно натолкнулся на решение вышеупомянутых случаев Рикардо. Отсутствие электронной почты трудно обнаружить (как вы упомянули), и вы определенно не хотите спамить вашу электронную почту root @ yourcompany. Если интересно, проверьте deadmanssnitch.com. . Этот инструмент, кажется, решает вышеупомянутые случаи. Кажется довольно простым в использовании - просто добавьте немного кода, который инструмент дает вам в ваш cronjob. Если ваша работа не выполняется по указанному внутреннему, вы будете предупреждены. Если ваша работа начнет работать снова, вы также будете предупреждены.

2
ss_jt

Я использую vixie-cron, поэтому я не знаю, относится ли это ко всему. Но у меня есть dead.letter файл, содержащий все выходные данные задания.

В моем /root/ папка у меня crons.cron который я установил в качестве моего crontab, запустив crontab /root/crons.cron. dead.letter будет создано в /root/ также.

Изменить Я просто Google'd dead.letter, и это недоставленная почта. Это никак не связано с cron. Если у вас не настроена почта (как у меня), у вас будет файл.

1
jonescb

Еще один полезный трюк - посмотреть, какие сценарии действительно выполняются.

Это делается с помощью run-parts -v --test /etc/cron.hourly/

> /etc/cron.hourly//logrotate

Если ваш скрипт не отображается, он не будет выполнен.

Это кстати работает только для сценариев, установленных в /etc/cron.hourly каталог. Он не показывает элементы, которые установлены в вашем crontab.

1
RickyA

Для новичков это может быть болью для отладки. Обязательно не меняйте значения минут и часов. Сначала приходит минута, потом час. Когда вы предоставляете значения меньше 12 для каждого, он примет их, но может работать не так, как ожидалось, или вообще не работать.

0
Michael Woyo