← Cloudflare Workers / workers / runtime-apis / handlers
Обработчик scheduled
Контекст
Когда Worker вызывается через Cron Trigger, scheduled() обработчик обрабатывает вызов.
Синтаксис
export default {
async scheduled(controller, env, ctx) {
await doSomeTaskOnASchedule();
},
};interface Env {}
export default {
async scheduled(
controller: ScheduledController,
env: Env,
ctx: ExecutionContext,
) {
await doSomeTaskOnASchedule();
},
};from workers import WorkerEntrypoint
class Default(WorkerEntrypoint):
async def scheduled(self, controller, env, ctx):
# controller.cron contains the cron pattern that triggered this event
# controller.scheduledTime contains the scheduled time in ms since epoch
print(f"Cron triggered: {controller.cron}")Свойства
-
controller.cronстрока- Значение Cron Trigger который запустил
ScheduledEvent.
- Значение Cron Trigger который запустил
-
controller.typeстрока- Тип контроллера. Всегда возвращает
"scheduled".
- Тип контроллера. Всегда возвращает
-
controller.scheduledTimeчисло- Время, когда
ScheduledEventбыл запланирован к выполнению в миллисекундах с 1 января 1970 года по UTC. Это значение можно разобрать какnew Date(controller.scheduledTime).
- Время, когда
-
envобъект- Объект, содержащий привязки, связанные с вашим Worker при использовании формата ES-модулей, такие как пространства имён KV и Durable Objects.
-
ctxобъект- Объект, содержащий контекст, связанный с вашим Worker при использовании формата ES-модулей. В настоящее время этот объект содержит только
waitUntilфункцию.
- Объект, содержащий контекст, связанный с вашим Worker при использовании формата ES-модулей. В настоящее время этот объект содержит только
Обработка нескольких cron-триггеров
Когда вы настраиваете несколько Cron Triggers для одного Worker каждый триггер вызывает один и тот же scheduled() обработчик. Используйте controller.cron чтобы определить, какое расписание сработало, и выполнить для каждого свою логику.
{
"triggers": {
"crons": ["*/5 * * * *", "0 0 * * *"],
},
}[triggers]
crons = [ "*/5 * * * *", "0 0 * * *" ]export default {
async scheduled(controller, env, ctx) {
switch (controller.cron) {
case "*/5 * * * *":
await fetch("https://example.com/api/sync");
break;
case "0 0 * * *":
await env.MY_KV.put("last-cleanup", new Date().toISOString());
break;
}
},
};export default {
async scheduled(
controller: ScheduledController,
env: Env,
ctx: ExecutionContext,
) {
switch (controller.cron) {
case "*/5 * * * *":
await fetch("https://example.com/api/sync");
break;
case "0 0 * * *":
await env.MY_KV.put("last-cleanup", new Date().toISOString());
break;
}
},
} satisfies ExportedHandler<Env>;from workers import WorkerEntrypoint, fetch
from datetime import datetime, timezone
class Default(WorkerEntrypoint):
async def scheduled(self, controller, env, ctx):
if controller.cron == "*/5 * * * *":
await fetch("https://example.com/api/sync")
elif controller.cron == "0 0 * * *":
await env.MY_KV.put("last-cleanup", datetime.now(timezone.utc).isoformat())Значение controller.cron это точная строка cron-выражения из вашей конфигурации. Она должна совпадать посимвольно, включая пробелы.
Методы
Когда скрипт Workers вызывается Cron Trigger, среда выполнения Workers запускает ScheduledEvent который будет обработан scheduled функция в классе Workers Module. ctx аргумент представляет контекст, в котором выполняется ваша функция, и содержит следующие методы для управления дальнейшим поведением:
ctx.waitUntil(promise): void. Используйте этот метод для регистрации асинхронных задач (например, логирования, аналитики для сторонних сервисов, потоковой передачи данных и кеширования), которые должны завершиться до завершения вызова. Первыйctx.waitUntilзавершиться ошибкой будут отслеживаться и фиксироваться как статус в Cron Trigger таблице Past Events. В противном случае это будет зафиксировано как успешное выполнение.