Из-за временных ограничений на территории РФ наблюдаются проблемы с оплатой. Если платёж не проходит, оставьте запрос в службу поддержки.Служба поддержки работает 24/7 — мы всегда на связи по вопросам хостинга и серверов.Открыт прием заявок на аренду выделенных серверов и размещение оборудования в дата-центре.Напоминаем: рекомендуем включить резервное копирование для дополнительной защиты данных.Доступна новая линейка VPS/VDS с NVMe-дисками и увеличенной производительностью.Технические работы на части серверов завершены. Все сервисы работают в штатном режиме.
Статья4 мин чтенияПросмотры0

Cloudflare Workers пропускали и дублировали Cron Triggers: что проверить после сбоя

Инцидент 26–27 октября затронул часть расписаний Cloudflare Workers: задания могли опаздывать, пропускаться или запускаться повторно. Разбираем безопасную сверку без массового перезапуска.

Комментарии 0

Ряд деревянных метрономов в светлом зале: одно место пустует, а рядом стоят два механизма
В этой статье

Если бизнес-задача выполнялась по расписанию Cloudflare Workers, проверьте окно с 00:48 до 04:15 МСК 27 октября: часть Cron Triggers могла запуститься позже, не запуститься вовсе или выполниться больше одного раза. Инцидент уже закрыт, поэтому сейчас важна сверка фактических результатов. Для конкретного проекта пропуски и повторы пока не подтверждены: сначала проверьте их по журналам и бизнес-данным. Массовый повтор без этой сверки может создать дубликаты.

Cloudflare начала расследование 26 октября в 21:48 UTC и сообщила о затронутой части планировщиков Workers. В карточке инцидента перечислены три наблюдаемых варианта: поздний запуск, пропуск и запуск более одного раза. Статус изменён на «устранён» 27 октября в 01:15 UTC. Это сообщение о работе сервиса, а не доказательство ошибки каждого проекта на Workers.

В сообщении от 23 октября Cloudflare уже описывала похожий инцидент с задержанными, пропущенными и повторными Cron Triggers. Повторяемость события — повод проверить не только журнал провайдера, но и то, как сама задача переносит повтор или отсутствие одного запуска.

Кого касается проверка

Cron Trigger — это расписание, которое вызывает обработчик scheduled() в Cloudflare Worker. Он может запускать синхронизацию каталога, подготовку отчёта, очистку временных данных, отправку уведомлений или обращение к внешнему API. Если проект не использует Workers Cron Triggers, этот инцидент не объясняет его пропущенное задание.

  • Составьте список Worker-скриптов, у которых были активны Cron Triggers в указанное окно.
  • Отдельно отметьте задания с необратимыми последствиями: списанием денег, изменением заказов, отправкой писем, выгрузкой остатков или удалением данных.
  • Зафиксируйте ожидаемое время каждого запуска в UTC: Cloudflare исполняет Cron Triggers по UTC, даже если команда обсуждает расписание по московскому времени.

Что проверить после инцидента

Начните с истории конкретного Worker. В документации Cron Triggers Cloudflare указывает, что раздел Cron Events хранит 100 последних вызовов, а Workers Logs даёт более длинную историю. История вызовов показывает работу обработчика, но итог бизнес-операции всё равно нужно сверять в системе, которую он меняет.

  1. Для каждого ожидаемого времени найдите соответствующий вызов: своевременный, поздний, отсутствующий или повторный.

  2. Сопоставьте вызов с результатом: созданным отчётом, обновлённой записью, отправленным сообщением или подтверждением внешнего API.

  3. Для повторов проверьте, не возникли ли две бизнес-операции с одним назначением. Не ограничивайтесь двумя строками в журнале Worker: второй запуск мог завершиться до изменения данных.

  4. Для пропусков определите, можно ли безопасно выполнить задачу позже. Используйте исходный период и стабильный идентификатор операции, если контракт системы это допускает.

  5. Запишите решение по каждому спорному запуску: результат уже получен, повтор нейтрализован, задача выполнена позже либо пропуск принят осознанно.

Событие ScheduledEvent соответствует запланированному запуску. Справка обработчика scheduled() описывает поле scheduledTime с запланированным временем и метод waitUntil() для регистрации асинхронных задач, результат которых влияет на статус вызова. Эти сведения помогают связать поздний фактический запуск с исходным расписанием, но не заменяют бизнес-идентификатор заказа, отчёта или периода.

Почему нельзя просто повторить всё окно

Пропущенную выгрузку иногда можно выполнить позже. Повторно отправленное письмо неприятно, а повторное списание денег с покупателя или создание второго заказа уже меняет данные. Поэтому одно действие «запустить всё ещё раз» смешивает разные риски.

Безопасная задача должна распознавать уже обработанную операцию. Для отчёта таким ключом может быть период, для импорта — версия пакета, для события — стабильный event_id. Если задача вызывает webhook, полезен отдельный разбор о том, почему повторная доставка не должна создавать второй заказ. Механизм зависит от системы, но критерий один: повтор с тем же смыслом не создаёт второй бизнес-результат.

Когда проверку можно закрыть

  • Для каждого важного расписания известны ожидаемые и фактические запуски в окне инцидента.
  • Поздние и пропущенные задания сверены с бизнес-данными, а не только с журналом Worker.
  • Повторные вызовы не создали дубликаты либо дубликаты выявлены и обработаны по штатной процедуре.
  • Задачи с последствиями получили проверяемый ключ повторного запуска и наблюдаемый итог.

На момент подготовки материала Cloudflare помечает инцидент как устранённый. Это не повод считать последствия автоматически исправленными внутри каждого проекта: провайдер восстановил планировщик, а владельцу приложения остаётся подтвердить, что нужные операции за спорное окно выполнены ровно в допустимом количестве.

Обсуждение 0

Делись опытом и задавай вопросы. Комментарии без ссылок появляются после проверки редактором.

Пока никто не написал. Начни обсуждение.