Cron jobs
A Cron service runs your code on a schedule and exits — perfect for nightly jobs, cleanups, report generation, or any recurring task.
Schedule
Section titled “Schedule”Set a standard 5-field crontab expression (minute hour day month weekday), or use a convenience alias like @daily, @hourly, or @weekly. The service page shows the schedule and the next run time, and validates the expression as you type.
- Run to completion — each run starts your container, runs your command, and stops when it exits. You’re billed for the run time, not for idle time between runs.
- Overlap protection — if a run is still going when the next tick arrives, the new run is skipped (no pile-ups).
- Run now — trigger a one-off run immediately from the service, without waiting for the schedule.
- Live reschedule — change the schedule any time; it takes effect immediately, no redeploy needed.
Every run’s output is captured and browsable per-run, so you can see exactly what happened on any given tick — the same runtime logs view, scoped to cron runs.
Deploying a cron job
Section titled “Deploying a cron job”Create the service with type Cron (from a Git repo or a Docker image, like any service), set the schedule and the command to run, and deploy. Deploying builds/updates the image and registers the schedule — the actual runs happen on each tick.
- Gate or verify runs with Deploy hooks.
- For always-on background work instead of scheduled runs, use a Worker (Service types).