Конфликт дня и дня недели, непонимание интервала, пересекающиеся задачи
1. Путаница в номере дня недели — в cron день недели задаётся от 0 до 6, где 0 — это воскресенье. Во многих реализациях 7 тоже воспринимается как воскресенье, но частая ошибка — принять 1 за воскресенье и сдвинуться на день. Понедельник — это 1, пятница — 5.
2. Одновременное указание дня месяца (day-of-month) и дня недели (day-of-week) — если оба поля заданы значением, отличным от *, большинство реализаций cron выполняют задачу, если совпадает хотя бы одно из них (не И, а ИЛИ). Пример: 0 0 13 * 5 выполняется «13-го числа или каждую пятницу», а не «только в пятницу 13-го».
3. Непонимание интервала */n — */15 означает шаг в 15 от нуля, то есть запуск на 0·15·30·45 минутах. Если использовать значение, не делящее 60 нацело, например */40, задача выполнится только на 0-й и 40-й минутах, а затем перескочит на 0-ю минуту следующего часа, и интервал станет неравномерным.
4. Ошибка с часовым поясом — cron обычно работает в часовом поясе сервера (как правило, UTC). Если писать выражение исходя из локального времени, задача фактически выполнится в другое время. Часовые пояса подробно разбираются в отдельном руководстве ниже.
5. Пересекающиеся задачи — если время выполнения превышает момент следующего запуска, новая задача может стартовать ещё до завершения предыдущей. Для долго выполняющихся задач безопаснее предусмотреть блокировку (lock) или защиту от повторного запуска. Составленное выражение заранее проверяйте по разделу следующие запуски в инструменте выше.