Перейти к содержимому
falang.ruEN

Триггеры по расписанию

Триггер по расписанию запускает сценарий сам, по повторяющемуся расписанию — без внешнего сервиса и без учётных данных для подключения. Есть два вида: фиксированный интервал («каждые 15 минут») иcron-выражение («в 09:00 по будням»). Под капотом оба вида работают через durable Temporal Schedule, а не через простой таймер внутри движка — поэтому срабатывание никогда не теряется при перезапуске, а у расписания есть собственная история последних запусков.

Срабатывает повторно с фиксированным периодом — целое число («каждые») и единица (секунды/минуты/ часы/дни/недели). Первое срабатывание происходит через один полный интервал после создания или возобновления триггера, а не сразу.

Срабатывает по стандартному 5-полевому cron-выражению (минута, час, день месяца, месяц, день недели) — например, 0 9 * * 1-5 для 09:00 по будням или */15 * * * * для срабатывания каждые 15 минут. 6-полевое выражение с ведущим полем секунд не поддерживается и отклоняется с пояснением при вводе. У cron-триггера также есть обязательный часовой пояс (IANA-имя, например Europe/Moscow или UTC), относительно которого вычисляется выражение.

Рядом с полем самого выражения есть визуальный конструктор — он позволяет выбрать период, дни недели, время суток и т. д. из выпадающих списков и сам формирует выражение; при этом текстовое поле всегда остаётся источником истины — если вписать вручную то, что конструктор не умеет представить, он просто покажет подсказку «пользовательское выражение», не изменяя введённый текст. Живое превью показывает ближайшие несколько срабатываний для текущих настроек, что позволяет проверить cron-выражение перед сохранением.

Привязанная функция получает один аргумент, fire, с двумя полями: scheduledAt (метка времени в формате ISO-8601 — время, на которое было запланировано это срабатывание, а не текущее время, в которое функция фактически начала выполняться) и timezone. Используйте fire.scheduledAt, когда функции нужно знать, на какой именно плановый слот она запущена — например, чтобы отформатировать его в локальное время или определить «это первый запуск за день».

  • Dev. Расписание синхронизируется с dev-стендом так же, как любой другой триггер. Если dev-раннер простаивает достаточно долго и автоматически масштабируется до нуля, вместе с ним приостанавливаются и его расписания — забытое расписание «каждые 10 секунд» на dev-стенде не будет вечно заставлять под (и сам Temporal Schedule) срабатывать. Следующая dev-сборка или ручной запуск снимают паузу. В блоке триггер-функции для триггера по расписанию также доступно действие «Запустить сейчас» — синтезированное срабатывание, которое запускает функцию немедленно, не дожидаясь очередного планового времени.

  • Prod. Опубликованное расписание никогда не приостанавливается автоматически — предполагается, что оно будет срабатывать само сколь угодно долго, в том числе будя простаивающий раннер незадолго до очередного срабатывания. Остановка опубликованной версии приостанавливает её расписания (а не удаляет их); повторный запуск возобновляет их работу.

Если срабатывание приходится на момент, когда предыдущий запуск того же триггера ещё не завершился, оно пропускается, а не запускается параллельно и не ставится в очередь — это соответствует ожидаемому поведению большинства автоматизаций по расписанию. Если движок (или сам Temporal) был недоступен в момент одного или нескольких плановых срабатываний, до часа пропущенных срабатываний будет «догнано» после восстановления; всё, что старше часа, просто пропускается. В блоке триггер-функции отображается текущее состояние расписания (активно/на паузе), время следующего и последнего срабатывания, а также количество срабатываний, пропущенных из-за перекрытия.

  • Учётные данные нужны только для внешних сервисов вроде ActivePieces — триггеру по расписанию они не требуются.

  • Политика перекрытия пока не настраивается по отдельным триггерам (разрешить параллельные или поставленные в очередь срабатывания вместо пропуска) — каждое расписание использует описанное выше поведение «пропускать при перекрытии».