Background jobs and schedules
Work that runs without somebody watching it, and how to tell whether it ran.
Some work does not belong in a screen: a nightly import, a revaluation, a statement run, a re-forecast. Those are jobs, and a job that should happen regularly is a schedule.
- A schedule names a job, when it should run, and what it should run against. The next due time is computed by the platform, not guessed by the browser.
- Every run is a row: when it started, how long it took, what it produced, and the error if there was one.
- A run in progress is claimed, so the same schedule firing twice does not run twice — a retried or overlapping trigger is refused rather than duplicated.
A seeded or copied schedule arrives disarmed and will not run until you arm it. This is the single most common surprise on a new company: the schedules are all there, correctly configured, and none of them have fired.