* Cron Dialect
Jenkins Pipeline Cron
* Quick Answer
Jenkins extends the standard 5-field cron syntax with the H (hash) symbol, which distributes scheduled jobs across available time slots based on a hash of the job name. This prevents the 'thundering herd' problem where hundreds of jobs all fire at minute 0 simultaneously, overloading CI infrastructure. Jenkins also supports human-readable aliases like @daily and @weekly.
Field Reference
This dialect uses 5 fields. Fields are listed left to right as they appear in the expression.
| Position | Field | Range | Special Chars | Notes |
|---|---|---|---|---|
| 1 | Minute | 0–59 or H | * , - / H | H picks a consistent pseudo-random minute based on job name hash. H/15 = every 15 min at hash offset. |
| 2 | Hour | 0–23 or H | * , - / H | H(0-7) constrains the hash to the range 0–7 (overnight hours). |
| 3 | Day of Month | 1–31 or H | * , - / H | |
| 4 | Month | 1–12 | * , - / | H not typically used in month field. |
| 5 | Day of Week | 0–7 | * , - / | 0 and 7 both = Sunday. Named values SUN–SAT accepted. |
Special Characters
The H (hash) symbol is Jenkins's key innovation. Rather than a fixed value, H evaluates to a consistent integer derived from the Jenkins job name. This means every job gets its own offset, spreading load across the cluster. H can appear anywhere a number is valid. H/15 means 'every 15 minutes starting at a hash-determined offset' — not necessarily :00, :15, :30, :45. A range constraint like H(0-29) limits the hash to the first half of the hour. Standard special characters (*, ,, -, /) work identically to POSIX cron.
Examples
Once per hour at a consistent hash-determined minute
Hourly builds, dependency checks — guaranteed not to collide with other jobs on the same minute.
Every 15 minutes at a hash-offset start
Frequent polling jobs where exact timing doesn't matter but load distribution does.
Once daily at a hash-determined hour and minute
Nightly builds, daily dependency scans — far better than 0 0 * * * which spikes all jobs at midnight.
Once daily during the overnight window (midnight to 7 AM)
Resource-intensive nightly jobs constrained to low-traffic hours while still distributed.
Once weekly on Monday at a hash-determined time
Weekly reports, Monday morning release candidate builds.
Once daily, sometime between midnight and 2:59 AM
Simple nightly jobs — Jenkins picks the exact time to spread load.
Once per week at a hash-determined day and time
Weekly dependency audits, infrequent maintenance jobs.
Keep this cron job monitored 24/7
UptimeRobot alerts you the moment a scheduled job stops responding. Free plan monitors up to 50 endpoints — no credit card required.
Common Gotchas
H is not portable — it only works in Jenkins
H is a Jenkins-specific extension. It has no meaning in standard cron, crontab, Quartz, or AWS EventBridge. If you copy a Jenkins cron expression into another system, replace H with a specific number. Using H outside Jenkins will cause an invalid expression error or unpredictable behaviour.
H/15 does not mean :00, :15, :30, :45
A common misconception is that H/15 aligns to quarter-hour boundaries. It does not. If H resolves to 7 for a given job, H/15 fires at :07, :22, :37, :52 — consistently for that job, but not on the standard quarter-hour marks. This is intentional: it distributes load away from the :00 and :30 marks.
@aliases are Jenkins-only shortcuts
@midnight, @hourly, @daily, @weekly, @monthly, and @annually are Jenkins convenience aliases. @midnight does not mean 0:00 exactly — it means a hash-distributed time between midnight and 2:59 AM. These aliases are not available in standard crontab without additional tooling.
H ranges are inclusive: H(0-29) constrains to that range
H(0-29)/10 means 'every 10 minutes, within the first half of the hour, at a hash-offset'. The range limits where the hash can land, not the step frequency. This is useful for constraining nightly builds to the first few hours of the night.
Porting from Standard Cron
Jenkins uses the same 5-field format and DOW numbering as standard POSIX cron. The only addition is H. To port a Jenkins expression to standard cron, replace each H with a specific number (e.g. H becomes 0 or a chosen minute). To port from @aliases, @midnight = 0 0 * * *, @weekly = 0 0 * * 0, @monthly = 0 0 1 * *.
How This Dialect Differs from Standard Cron
Jenkins uses the same 5-field structure as standard cron but introduces the H (hash) keyword, which distributes job start times pseudo-randomly within a range to prevent thundering-herd load spikes. H can replace any numeric value or range: H * * * * means once per hour at a hash-stable minute, and H/15 * * * * means every 15 minutes offset by a hash. The hash is derived from the job name, so each job gets a consistent but different offset. Standard cron cannot express this load-balancing behaviour.
| Aspect | Standard Cron | Jenkins |
|---|---|---|
| Field count | 5 fields | 5 fields |
| Seconds precision | No | No |
| Year field | No | No |
| Special chars beyond * , - / | None | H |
| DOM / DOW conflict rule | OR combination | OR combination |