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

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

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

решение1

Как уже указывали другие, 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 журналов демона почтовой программы. Например:

[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.

решение2

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

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

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

решение3

Если вы не видите письма, возможно, вы спамите 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 и т. д.) Это также уменьшает спам в электронной почте для root.

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

решение4

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

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

Связанный контент