@elcrm/cron
v0.0.3
Published
In-process cron scheduler for Bun/elCRM: Cron.useJob, 6-field cron expressions.
Readme
@elcrm/cron
In-process планировщик задач для elCRM под Bun: регистрация колбэков по интервалу (секунды) или 6-полевому cron-выражению.
Установка
bun add @elcrm/cronТребования: Bun ≥ 1.0. Пакет отдаёт TypeScript-исходники (src/lib) — отдельная сборка у потребителя не нужна.
Разработка и публикация: dev.md, deploy.md.
Быстрый старт
import { Cron } from "@elcrm/cron";
// Каждые 30 секунд
Cron.useJob(async () => {
console.log("tick");
}, 30, "heartbeat");
// 6 полей: second minute hour day month weekday
Cron.useJob(
async () => {
console.log("ежедневно в 09:00:00");
},
"0 0 9 * * *",
"morning",
);
Cron.run();
// Остановить одну задачу или все
// Cron.stop("heartbeat");
// Cron.stop();API
Cron.useJob(func, interval?, name?)
Регистрирует задачу. Возвращает id (или name, если передан).
| interval | Поведение |
| ---------- | --------- |
| undefined | запуск на следующей целой минуте, далее — каждую минуту |
| number | интервал в секундах |
| string | cron: second minute hour day month weekday |
Поддерживаются *, списки (1,5,10), диапазоны (1-10), шаги (*/5, 0-30/5).weekday: 0 = воскресенье … 6 = суббота.
Пока async-колбэк ещё выполняется, следующий тик пропускается (нет перекрытия).
Cron.run()
Запускает все зарегистрированные задачи. Возвращает true / false.
Cron.stop(id?)
Останавливает задачу по id или все, если id не указан.
Cron.list()
Список id зарегистрированных задач.
CronParser / parseCronExpression / getNextExecution
Низкоуровневый парсер (экспорт из пакета). Обычно достаточно Cron.*.
Переменные окружения
| Переменная | Значение | Назначение |
| ---------- | -------- | ---------- |
| CRON_DEBUG | 1 | подробные логи планировщика и next-run |
Формат cron
┌──────── second (0–59)
│ ┌────── minute (0–59)
│ │ ┌──── hour (0–23)
│ │ │ ┌── day of month (1–31)
│ │ │ │ ┌ month (1–12)
│ │ │ │ │ ┌ day of week (0–6, Sunday=0)
│ │ │ │ │ │
* * * * * *Примеры:
| Выражение | Смысл |
| --------- | ----- |
| 0 * * * * * | каждую минуту на 0-й секунде |
| */15 * * * * * | каждые 15 секунд |
| 0 0 9 * * 1-5 | 09:00 в будни |
Лицензия
MIT
