
Если я cron
неправильно настраиваю задания, они, кажется, молча терпят неудачу. Где мне искать журнал ошибок, чтобы понять, что пошло не так?
решение1
Как уже указывали другие, cron
отправит вам по электронной почте вывод любой запущенной программы (если есть какой-либо вывод). Итак, если вы не получаете никакого вывода, есть три основных возможности:
crond
не смог даже запустить оболочку для запуска программы или отправки электронной почтыcrond
возникли проблемы с отправкой выходных данных или почта была утеряна.- программа не выдала никаких выходных данных (включая сообщения об ошибках)
Случай 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.