Cron Expression Examples for Every 5, 10, 15, 30 Minutes and More

"Run this every N minutes" is probably the single most common cron requirement — polling an API, refreshing a cache, checking a queue, or syncing data. It is also the one developers get wrong most often, usually by confusing a step value with a fixed value. This guide walks through every common minute-based and hour-based interval with copy-paste-ready expressions.

How the step syntax (/) works

A standard cron expression has five fields: minute, hour, day-of-month, month, and day-of-week. The / character defines a "step" within a range. When you write */5 in the minute field, you are saying "starting from the full range (0–59), take every 5th value" — which gives 0, 5, 10, 15 ... 55. It does not mean "every 5 minutes from now" — cron always aligns to the clock, not to when the job was last triggered or when you deployed it.

┌─ minute        (0 – 59)
│ ┌─ hour         (0 – 23)
│ │ ┌─ day/month  (1 – 31)
│ │ │ ┌─ month    (1 – 12)
│ │ │ │ ┌─ day/week (0 – 6)
│ │ │ │ │
*/5 * * * *   → every 5 minutes

Common minute intervals

  • */1 * * * * — every minute (same as * * * * *)
  • */5 * * * * — every 5 minutes (00, 05, 10, 15 ... 55)
  • */10 * * * * — every 10 minutes (00, 10, 20, 30, 40, 50)
  • */15 * * * * — every 15 minutes (00, 15, 30, 45)
  • */20 * * * * — every 20 minutes (00, 20, 40)
  • */30 * * * * — every 30 minutes (00, 30)
  • 0,15,30,45 * * * * — identical to */15, written explicitly

Hourly and every-N-hours intervals

The same step logic applies to the hour field once you fix the minute field to a single value (usually 0, so the job runs on the hour):

0 * * * *      → every hour, on the hour
0 */2 * * *    → every 2 hours (00:00, 02:00, 04:00 ...)
0 */3 * * *    → every 3 hours
0 */6 * * *    → every 6 hours (4 runs a day)
0 */12 * * *   → every 12 hours (midnight and noon)
0,30 * * * *   → twice an hour, at :00 and :30
15 * * * *     → once an hour, at 15 minutes past

Combining minute and hour steps

You can combine a minute step with a restricted hour range for schedules like "every 10 minutes, but only during business hours":

*/10 9-17 * * 1-5   → every 10 minutes, 9 AM–5:50 PM, Mon–Fri
*/5 0-5 * * *       → every 5 minutes, only between midnight and 5:59 AM
*/15 8-20 * * *      → every 15 minutes, 8 AM to 8:45 PM

Things that trip people up

  • Steps don't need to divide evenly. */7 runs at 0, 7, 14, 21 ... 56 — the last gap before wraparound is shorter than 7 minutes. Prefer divisors of 60 (5, 10, 15, 20, 30) for clean, evenly spaced runs.
  • node-cron and Quartz add a seconds field. If your library shows six fields, */5 * * * * * means every 5 seconds, not minutes — always check the library's docs before assuming standard 5-field cron.
  • GitHub Actions caps frequency at 5 minutes and even that is a soft minimum — busy periods can delay runs. Don't rely on exact timing for sub-5-minute jobs there.
  • High-frequency jobs risk overlap. If a job scheduled every 5 minutes sometimes takes longer than 5 minutes to finish, add a lock file or a mutex so a new run never starts while the previous one is still going.

Frequently Asked Questions

What is the cron expression for every 5 minutes?

The cron expression for every 5 minutes is */5 * * * *. The step value /5 in the minute field tells cron to run at minute 0, 5, 10, 15, 20, and so on through 55.

How do I run a cron job every 30 minutes?

Use */30 * * * * to run at minute 0 and minute 30 of every hour. Alternatively you can write 0,30 * * * * which does the same thing explicitly.

What is the difference between */5 and 5 in the minute field?

*/5 means every 5 minutes starting from 0 (0, 5, 10...55). A plain 5 means the job runs once, only at minute 5 of every hour. They are not interchangeable.

Try the Free Cron Expression Generator

Skip the mental math — describe your interval in plain English (e.g. "every 10 minutes between 9 and 5 on weekdays") and get the correct cron expression instantly.

Related articles