Jobs come in two flavours: those that should run once at a specific time, and those that should run repeatedly on a schedule. The platform supports both, and the choice changes how you reason about retries, cancellation and observability.
Run-Once Jobs
- Scheduled for a specific datetime.
- Runs exactly once at the scheduled time (or as soon as possible after).
- On completion, marked success or failed; can be re-queued manually.
- Useful for: one-off migrations, scheduled announcements, deferred actions.
Examples:
- Send a welcome email at 09:00 tomorrow.
- Run a one-time data migration script in production at the weekend.
- Publish a blog post at a future time.
Recurring Jobs
- Defined by a cron schedule.
- Runs every time the schedule fires, indefinitely.
- Can be paused (skip future runs) without deleting.
- Retains a configurable number of past execution records.
- Useful for: nightly syncs, periodic exports, regular cleanups, heartbeat checks.
Examples:
- Nightly Salesforce sync.
- Weekly subscription renewal reminder emails.
- Hourly cache-warm-up.
- Monthly invoice generation.
Designing the Right Job Type
- If it should happen once and never again → run-once. Don't make it recurring and then disable it after the first run.
- If it's part of an ongoing operational pattern → recurring. Don't manually re-queue a run-once after every cycle.
- If you need a backfill → run-once with a parameter range; recurring picks up future records only.
Worked Examples
- Migration from legacy CRM: Run-once, scheduled for the weekend cutover.
- Daily reconciliation: Recurring, 02:00 daily, retain last 30 executions for audit.
- Black Friday banner: Run-once at midnight to flip the homepage banner on, plus a paired run-once at midnight on Tuesday to flip it off.
- Subscription renewals: Recurring, 01:00 daily, paused over holidays via the “pause until” feature.