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

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

Как указывали другие, 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 обычно появляются как от root@yourhost . Вы можете использовать MAILTO=... в файле crontab, чтобы отправить электронное письмо cron по определенному адресу, что должно облегчить grep журналы демона почтовой программы. Например:

 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 

поэтому вы можете проверить, действительно ли кто-то запустил колл, просмотрев mtime /tmp/a_command_has_run .

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

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

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

Это отлично подходит для сообщений об ошибках, длина которых составляет всего 1-2 строки, например «yourcronjob: command not found». Он также использует вашу существующую инфраструктуру syslog (Logrotation, central syslogging, Splunk и т. Д.). Он также уменьшает спам электронной почты до корня.

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

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

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

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

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

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

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

 $ mailx 

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

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

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

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

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

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

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

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