Cron
Deno.cron() — это API среды выполнения Deno для планирования регулярного запуска кода JavaScript или TypeScript с использованием синтаксиса cron. Он встроен в сам Deno, поэтому один и тот же код можно запускать локально и развёртывать без изменений.
Deno.cron в настоящее время является нестабильным API. Чтобы использовать его локально с deno run, включите флаг --unstable-cron (или добавьте "cron" в массив unstable в deno.json).
deno run --unstable-cron main.ts
Определение задания cron
Deno.cron() принимает понятное человеку имя, расписание и функцию-обработчик. Имя идентифицирует задание cron в журналах, расписание определяет время запуска обработчика, а все значения времени указаны в UTC.
Deno.cron("log-a-message", "* * * * *", () => {
console.log("This runs once a minute.");
});
Выражение cron из 5 полей содержит по одному полю на единицу времени; поля разделяются пробелами:
┌──────────── minute (0-59)
│ ┌────────── hour (0-23)
│ │ ┌──────── day of month (1-31)
│ │ │ ┌────── month (1-12 or JAN-DEC)
│ │ │ │ ┌──── day of week (0-6 or SUN-SAT, where 0 is Sunday)
│ │ │ │ │
* * * * *
В каждом поле допускается точное значение, * (любое значение), диапазон (1-5), список (1,3,5) или шаг (*/15 — каждое пятнадцатое значение). Например, 0 9 * * MON-FRI выполняется в 09:00 UTC по будням.
Расписание может быть задано стандартным выражением cron из 5 полей или структурированным объектом:
Deno.cron("hourly-task", { hour: { every: 1 } }, () => {
console.log("This runs once an hour.");
});
Задания cron необходимо регистрировать на верхнем уровне модуля до запуска любого сервера. Определения, вложенные в обработчики запросов, условные конструкции или обратные вызовы, не будут обнаружены.
Повторные попытки и задержка между ними
По умолчанию неудачные вызовы обработчика не повторяются. Передайте backoffSchedule (массив задержек в миллисекундах), чтобы повторять вызов при сбое:
Deno.cron(
"retry-example",
"* * * * *",
{ backoffSchedule: [1000, 5000, 10000] },
() => {
throw new Error("Will be retried up to three times.");
},
);
Запуск заданий cron в рабочей среде
Deno.cron хранит состояние выполнения в памяти Deno CLI, а значит, каждый процесс поддерживает собственный независимый набор задач cron. Для рабочих нагрузок в production Deno Deploy расширяет этот API среды выполнения: обнаруживает определения Deno.cron() во время развёртывания, планирует и запускает их, обрабатывает повторные попытки и отображает запуски на панели управления — поэтому вам не нужно самостоятельно поддерживать постоянно работающий процесс.
OpenTelemetry
При включённом OpenTelemetry (OTEL_DENO=true) каждый вызов Deno.cron() автоматически создаёт интервал OpenTelemetry. Это позволяет отслеживать выполнение cron наряду с другим инструментированным кодом:
OTEL_DENO=true deno run --unstable-cron main.ts
Каждый вызов cron создаёт интервал с именем задания cron. Интервал охватывает время выполнения функции-обработчика, а любые интервалы, созданные внутри обработчика, становятся его дочерними интервалами.
Последнее обновление:
© 2018–2025 the Deno authors
Licensed under the MIT License.
https://docs.deno.com/runtime/fundamentals/cron