Skip to main content

Jenkins cron - syntax, examples & the H modifier

At 04:30, every day.

Next runs · UTC

Calendar

September 2026 · UTC

0 runs

About this tool

Jenkins cron uses a 5-field syntax plus a unique H “hash” modifier that spreads job firings across the available range - preventing the top-of-the-hour load spike that hits when every Jenkins job uses 0 * * * *. It does NOT support L, W, ? or #.
For last-day-of-month patterns in Jenkins see the dedicated guide.

Jenkins cron field syntax

text
MIN HOUR DOM MONTH DOW
 H   *   *    *    *


Field      Range
minute     0-59
hour       0-23
day-month  1-31
month      1-12 or JAN-DEC
day-week   0-7 or SUN-SAT (0 and 7 = Sunday)

All standard cron operators (*, ,, -, /) work. Comment lines start with #.

The Jenkins H modifier

Jenkins-specific. H means “a value chosen by hash of the job name” - deterministic per-job but spread across the range. Common patterns:

  • H * * * * - every hour at a stable random minute.
  • H/15 * * * * - every 15 minutes, starting at a hash-determined offset.
  • H 2 * * * - daily at 02:H (some random minute between 02:00 and 02:59).
  • H H * * * - daily at a hash-determined hour and minute.
  • H(0-30) * * * * - random minute in the first half of the hour.
  • H 0 * * 1-5 - every weekday at midnight (just hash on the minute).

H in the day-of-month or month field is valid but rarely useful - those values change rarely so hashing has limited spreading effect.

Pipeline triggers block

groovy
pipeline {
  agent any
  triggers {
    cron('H/15 * * * *')
  }
  stages { ... }
}


// Multi-line cron for monthly + nightly:
pipeline {
  agent any
  triggers {
    cron('''
      H 2 * * *           // nightly at 02:H
      H H 1 * *           // monthly on the 1st at hash time
    ''')
  }
}

Freestyle 'Build periodically'

In the Freestyle job UI, paste your cron lines directly into the “Build periodically” box. Jenkins validates them on save and shows the next firing time in the help text below the field. Comments and TZ prefixes are accepted.

Jenkins cron pitfalls

  • SCM polling vs. cron - both can fire a build. Use a when block to avoid duplicate runs.
  • JVM timezone - defaults to the controller JVM's timezone. Set via TZ prefix or JVM property.
  • Concurrency - by default a single job doesn't run concurrently; subsequent triggers queue. Set the build to allow concurrency if you want overlap.
  • No L/W/# - use multi-cron or a runtime date check inside the build.

Examples

  • 0 18 * * *
    Every day at 18:00
  • 0 */5 * * *
    Every 5 hours
  • 0 18 * * 1-5
    Weekdays at 18:00
  • 0 0 1 * *
    Once a month, on the 1st at midnight

Cheatsheet

Full cheatsheet
FieldReq.RangeWildcards
minuteyes0-59, - * /
houryes0-23, - * /
day of monthyes1-31, - * /
monthyes1-12 or JAN-DEC, - * /
day of weekyes0-6 or names; some dialects use 0-7 or 1-7 — see Dialects, - * /

Frequently asked questions

Syntax

What does the H modifier do in Jenkins cron?

H is Jenkins' hash modifier. It uses a hash of the job name to deterministically pick a value within a range - so a job with H/15 * * * * runs every 15 minutes but at a stable, hash-derived minute (e.g., 7, 22, 37, 52) instead of 0/15/30/45. Spreads load across many jobs without coordination.

Jenkins H reference
Can I add comments to a Jenkins cron expression?

Yes - lines starting with # are treated as comments and ignored. Useful when configuring multi-line cron schedules in a Freestyle job's 'Build periodically' field or a pipeline triggers block.

Jenkins configuration guide
How many fields does Jenkins cron use?

Jenkins uses five fields: minute, hour, day of month, month, and day of week. It has no seconds or year field.

Jenkins dialect reference

Timing

How do I run a Jenkins job once per hour without a load spike?

Use H * * * *. Jenkins chooses one stable minute for the job instead of scheduling every job at minute zero.

Jenkins H examples
How does H/15 * * * * behave in Jenkins?

It runs every 15 minutes from a stable hash-derived offset. The offset spreads jobs across the hour and remains deterministic for that job.

Jenkins H reference
Can Jenkins limit H to part of a field range?

Yes. H(0-30) * * * * picks a stable minute from 0 through 30, allowing load spreading within a bounded window.

Jenkins H examples
Can Jenkins use a fixed cron time instead of H?

Yes. 0 9 * * 1-5 runs at exactly 09:00 on weekdays, but many identical fixed schedules can create a simultaneous load spike. Expression: 0 9 * * 1-5

Open in editor
Load-spike anti-pattern

Days and months

Why doesn't Jenkins cron support L?

Jenkins uses five cron fields plus its H hash modifier, but not Quartz-style L, W, ?, or #. For month-end, trigger daily and gate the work at runtime by checking whether tomorrow falls in the next month; this handles leap years safely.

Jenkins month-end guide
How do I run a Jenkins job on weekdays?

Use H 9 * * 1-5 to run at a stable minute during the 09:00 hour from Monday through Friday.

Jenkins examples
How does Jenkins combine day-of-month and day-of-week?

Jenkins uses AND semantics when both day fields are restricted. This differs from Vixie cron, which uses OR semantics.

Dialect day rules

Timezones and DST

How do I set the timezone for a Jenkins cron?

Prefix the cron line with TZ=America/New_York (Jenkins 2.x supports per-trigger TZ). Or set the JVM timezone via -Duser.timezone=... on the controller. By default, Jenkins uses the controller's JVM timezone.

Timezone reference

Platforms

Does Jenkins support cron aliases such as @daily?

Yes. Jenkins supports calendar aliases and hashes their timing to spread load; @midnight selects a stable time from 00:00 through 02:59.

Special strings
Where does cron go in a Jenkins declarative pipeline?

Put it in the triggers directive as cron('H/15 * * * *'). Jenkins then evaluates the five-field schedule for that pipeline job.

Pipeline trigger example

Debugging

Why is a Jenkins cron trigger not running when expected?

Check the controller timezone, saved trigger configuration, field count, and next-run preview. Also verify that another build is not queued or already occupying the job.

Jenkins pitfalls

Crontap

Can Crontap replace a Jenkins HTTP scheduling trigger?

Crontap can invoke an HTTP endpoint on a cron schedule, but Jenkins-specific H must be replaced with a concrete minute before handoff.

Schedule API calls

Write the cron here. Run it on Crontap.

Point Crontap at any URL. Pick any cron. Done.

WordPress, Shopify, Railway, Cloud Run, Vercel, HubSpot, Ghost, your own box. If it answers HTTP, Crontap can drive it on a clock you can read, in the timezone that actually matters, and page you when something breaks.

1.9k+ teams · Free forever tier · No credit card