Scheduling
The builder's five modes and the cron they translate into; the workspace timezone and why jobs have none of their own.
A job's schedule is always one five-field cron expression. The builder in the form only helps to assemble it — Runjet stores and checks cron, and whatever the builder cannot express you write in Advanced (raw cron) mode.
The builder
The Schedule mode switch has six positions. The first five make an expression; the sixth leaves it to you.
| Mode | What you give it | Cron |
|---|---|---|
| Every N minutes | N from 1 to 59 | */N * * * * |
| Every N hours | N from 1 to 23 | 0 */N * * * — always on the hour |
| Daily at time | a time | M H * * * |
| Weekly on day | a weekday and a time | M H * * D, Sunday is 0, Saturday 6 |
| Monthly on day | a day of the month, 1–31, and a time | M H D * * |
| Advanced (raw cron) | an expression | whatever you write |
When you edit a job the builder recognises an expression it could have made
itself and opens it in the right mode; anything else opens as
Advanced. The same recognition is behind the text in the job list —
Every 5 minutes, Daily at 09:00, Weekly on Monday at 07:30 — and an
expression that fits none of the patterns is shown as it is.
Two things the builder cannot do and cron can: a range of days (1-5 for
weekdays) and several values in one field (0 6,18 * * *). Both, along with
steps and the names of months and days, are in the
cron reference.
Timezone
Every workspace has one timezone, and all of its schedules are evaluated in
it. 0 2 * * * means two in the morning in the workspace's zone, daylight
saving included — an hour that does not exist on a given day simply does not
arrive, and an hour that happens twice runs the job once.
The zone is chosen at registration, guessed from the browser, and changed afterwards on the Workspace screen by an admin. A workspace that never chose one is in UTC.
Changing it moves every job in absolute terms, and does not touch a single
schedule. 0 3 * * * keeps saying three; the zone decides which three. Moving
from UTC to Europe/Prague therefore makes a nightly job run two hours earlier
than it did in summer — the expression is not rewritten, because a schedule that
changed under you would be worse than one that moved.
Why jobs have no zone of their own
Every workspace has its own cron engine, started in its own zone; that is what
makes 0 2 two in the morning without the zone having to be encoded into the
expression. A zone per job would mean either an engine per job, or an
expression carrying its zone with it — which the dashboard's
"next up" band would then have to know how to convert. A
job that needs a different zone from the rest of the workspace converts the
hour itself, for now.
When a schedule takes effect
A change to a schedule applies the moment it is saved — the running engine takes it up without a restart. A disabled job (Enabled off) is not in the engine at all, which is why you will not see it in what is next up either. What becomes of an occurrence that fell during an outage is for missed runs.