Синтаксис cron — это пять полей чисел и символов, которые должны каким-то образом выразить «каждый будний день в 9 утра, кроме праздников» или «каждые 15 минут с 8 до 18». Поля — минута, час, день месяца, месяц и день недели — в порядке, который никто не запоминает правильно с первого раза, а звёздочки, запятые, дефисы и слэши означают разные вещи в зависимости от позиции.
0 9 * * 1-5 выглядит разумно, но это 9 утра или 9 вечера, и означает ли 1-5 с понедельника по пятницу или что-то совершенно другое в зависимости от того, считает ли реализация cron воскресенье как 0 или как 7? Ошибиться в этом в пайплайне деплоя, задаче резервного копирования или запланированном отчёте означает либо тихие сбои, либо срабатывание задачи в неудобное время — иногда неделями, пока кто-то не заметит.
У каждой реализации cron свои особенности
Стандартный Unix cron, CronJob в Kubernetes, AWS EventBridge и различные платформы CI используют примерно один и тот же синтаксис из пяти полей, но немного различаются — поддерживаются ли секунды, как работает нумерация дней недели, действительны ли определённые сокращения вроде @daily. Написать расписание, которое сработает правильно с первого деплоя, значит точно понимать, с какой разновидностью cron вы имеете дело.
Переводите выражения на понятный язык
Bellows включает помощника с cron-выражениями, который берёт строку расписания и объясняет простым языком, что она на самом деле означает, чтобы вы могли проверить своё намерение перед тем, как задеплоить запланированную задачу куда угодно.
Проверка перед деплоем
Запланированная задача, срабатывающая в неверное время, часто оказывается тихим сбоем — ничего не падает, она просто запускается не тогда, когда вы намеревались, иногда пересекаясь с окном обслуживания или нагружая базу данных в час пик. Проверка простого текстового значения строки cron перед мержем конфигурации деплоя ловит это до того, как оно превратится в вызов в 2 часа ночи.
Чтение чужого расписания
Унаследовав кодовую базу с десятком существующих cron-задач, приходится разбираться, что делает каждая, прежде чем безопасно что-то менять. Быстрый перевод каждого выражения быстрее, чем мысленный разбор пяти загадочных полей по одной задаче за раз.