Cron that doesn't fire twice. Ever.
BullMQ-backed distributed scheduling. Exactly-once guaranteed. Per-worker rate limiting.
Distributed scheduling is surprisingly easy to get wrong.
Fire a cron twice and you might charge a customer twice. Fire zero times and you miss a report. Fire with drift and your reports lag.
Appstrate uses BullMQ's repeatable jobs for exactly-once firing across N workers. Max 5 runs/min per schedule, configurable. Upgrades are zero-downtime.
Create a schedule. Walk away.
Cron expression + agent + input. Scheduler dispatches to the same run path as API calls. All observability applies.
{
"name": "Nightly enrichment",
"connectionProfileId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"cronExpression": "0 3 * * *",
"timezone": "Europe/Paris",
"input": {
"source": "hubspot"
}
}What makes it work.
Exactly-once
Atomic Redis dequeue. No double-fires across workers.
Timezone-aware
DST-safe cron. IANA tz identifiers.
Rate limited
Default 5/min per schedule. Protects against runaway loops.
Boot sync
Schedules re-registered from DB on startup. No stale state.
Schedules you can sleep through.
Distributed exactly-once firing. Boring — the good kind.