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.
*/7runs 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
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.
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.
*/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.