Jenkins Cron Tool
Validate and explain Jenkins build schedules — H hash tokens, aliases and TZ lines — with honest run windows, entirely on this device.
Stands in for the job name Jenkins hashes — feeds the labeled sample only. No TZ= line — previews use the timezone selected here; your Jenkins controller applies its own zone.
The plain-English description appears here.
| Field | Value | Meaning |
|---|---|---|
| Minute | — | — |
| Hour | — | — |
| Day of month | — | — |
| Month | — | — |
| Day of week | — | — |
Run previews for a valid schedule line appear here.
History
Valid schedules you run are kept here — on this device only.
Press ? for shortcuts
Do it offline:$ npx cronstrue "45 1 * * *"
How to use it
- Paste the Build periodically text — schedule lines, # comments and a leading TZ= line are all understood.
- Read the badge and the five-row field table; diagnostics print beside your input, byte for byte.
- On an H line, read its window; type a job name for one clearly labeled sample resolution.
- Copy the schedule, the sample's plain-cron form, or a Jenkinsfile triggers snippet.
Jenkins reads its Build periodically field as five numeric fields plus one token of its own: H, which hashes the job name so a thousand jobs don't all fire at 00:00. Paste the whole field text — TZ= line, comments and all — to check it against the documented grammar. H lines get an honest window, never an invented next build time.
How it works
A strict lexer applies the Jenkins grammar first: digits only — MON is refused with the numeric fix named — and a sixth or seventh field is called out as Spring or Quartz dialect.
Lines without H become canonical numeric text for the shipped classic core, which describes them and iterates real runs — keeping only dates satisfying both day fields when both are restricted — Jenkins never applies the classic either-day rule.
H forms get window math instead: plain H lands anywhere in its field's range except day-of-month, hashed within 1–28 so a job never waits on a 31st. H/n holds one phase in 0 to n−1.
The optional sample resolver hashes your job name with FNV-1a-32 over seed, space, field index — version 1, documented because it is this page's construction, not Jenkins's. The controller hashes differently; that is why every sample carries its caption.
Examples
H/15 * * * *Runs every 15 minutes from a hash-chosen start (0–14) — the exact time depends on the job-name hash.Four fires an hour at one stable offset: for the sample job name my-job, this page's hash resolves the line to 12,27,42,57 * * * *.
@midnightRuns once daily, some time between 00:00 and 02:59 — the exact time depends on the job-name hash.@midnight expands to H H(0-2) * * * — the small hours, not 00:00 sharp. The my-job sample lands at 01:57.
H H(9-16)/2 * * 1-5Runs at a hash-chosen minute (0–59), every 2 hours from a hash-chosen start (9–10) within hours 9–16, on Monday through Friday — the exact time depends on the job-name hash.The handbook's every-two-hours-at-work example: the start hour hashes into 9–10, then the fires march in twos up to 16.
TZ=Europe/London
45 9 * * 1-5At 09:45, Monday through FridayA two-line paste: TZ= pins previews to London, so fires ride the March clock change — 09:45 on the wall, 08:45 UTC under BST. Real times, no H; the tool still suggests H 9 * * 1-5.
Every example on this page is executed against the same engine that powers the tool, on every build.
Gotchas worth knowing
Per-field H windows — day-of-month stops at 28
Plain H spans the field: minutes 0–59, hours 0–23, months 1–12, weekdays 0–6 — but day-of-month hashes within 1–28, never a 29th, 30th or 31st.
H/n is one phase, not every-n-from-zero
H/15 picks a start in 0–14 and holds it: my-job draws :12, :27, :42, :57; backend-nightly draws :05, :20, :35, :50. Fields hash independently.
Short day-of-month cycles wobble at month end
H/3 in day-of-month cycles inside 1–28; the hop into next month's phase can stretch three to six days. Jenkins's warning appears here too.
Every alias is H-based
@yearly and @annually mean H H H H *; @monthly H H H * *; @weekly H H * * H; @daily H H * * *; @midnight H H(0-2) * * *; @hourly H * * * *. None promises a fixed time.
TZ= works on the first line only
Jenkins reads TZ=Europe/London solely as line one — lower placements are errors. Absent, builds follow the controller's zone; previews then use yours and say so.
Both day fields set means BOTH must match
Jenkins fires only when both day fields agree on one date: H H 1,15 1-11 1 waits for a 1st or 15th falling on Monday. Classic crontabs run on either.
Digits only — no names, no seconds
The lexer has no MON or JAN tokens and no seconds column. Six fields is Spring's dialect, seven is Quartz's; the diagnostics point at the right one.
Page hash ≠ Jenkins hash — and pollSCM reads H too
Samples use the FNV-1a-32 construction above; your controller may pick differently. No CLI speaks H — resolve a sample, then describe that. pollSCM accepts the same grammar.
Common errors
Field 5 (day of week): "MON" — Jenkins fields are numeric; use 1 for Monday.- Name tokens belong to other dialects; Jenkins weekdays count 0–7 with both ends Sunday.
Found 6 fields — Jenkins cron has exactly 5, with no seconds field. A 6-field schedule is Spring cron syntax.- A leading seconds column marks a Spring schedule; drop it to get the Jenkins line.
Field 1 (minute): "h/15" — Jenkins's hash token is an uppercase H; write "H/15".- Only capital H is the hash token, so the fix is one keystroke.
Field 1 (minute): "1,H" combines H with a list — not documented Jenkins syntax; H must be the only term in its field.- H stands alone in a field; to mix fixed and hashed minutes, use two lines.
Unknown time zone "Mars/Olympus" — use an IANA name like "Europe/London".- The TZ= line takes an IANA zone id; abbreviations like CET are ambiguous and refused.
Field 1 (minute): "60" is outside 0–59.- Minutes end at 59; the top of the hour is minute 0.
FAQ
What does H mean in a Jenkins cron schedule?
A value Jenkins computes from the job's name, mapped into the field's range — stable per job, different across jobs. Fifty jobs on H H * * * scatter across the day instead of stampeding one minute.
Why doesn't this page show an exact next build time for H schedules?
Only your controller knows its hash outcome; an exact time would be a guess dressed as a fact. The grammar guarantees a window, which is shown — add a job name for a labeled sample.
Does Jenkins cron support MON, JAN or a seconds field?
No. The grammar tokenizes digits, so names are refused with the number spelled out, and no seconds column exists — six fields means Spring, seven means Quartz, and the message says which.
Keyboard shortcuts
- ⌘/Ctrl + Enter
- Re-validate the schedule and refresh the preview pane.
- ⌘/Ctrl + S
- Download schedule, explanations and preview as .txt.
- ⌘/Ctrl + C
- Copy the schedule when nothing is selected.
- ⌘/Ctrl + Shift + C
- Copy the schedule regardless of selection.
- t
- Switch the color theme — inert while you type.
- ? or ⌘/Ctrl + /
- Show the seven bindings this page registers.
- Esc
- Close the dialog and restore focus.