You need a job to run every 5 minutes. The answer is */5 * * * * — but if that line looks like line noise, this guide will make cron expressions readable in about five minutes (fittingly).
The five fields
A standard cron expression is five fields separated by spaces, read left to right:
┌───────── minute (0–59) │ ┌─────── hour (0–23) │ │ ┌───── day of month (1–31) │ │ │ ┌─── month (1–12) │ │ │ │ ┌─ day of week (0–7, 0 and 7 = Sunday) │ │ │ │ │ * * * * *
An asterisk means "every". Beyond plain numbers, three operators cover almost everything: a range (1-5), a list (1,15,30), and a step (*/5, meaning every 5th value).
The schedules everyone needs
- */5 * * * * — every 5 minutes.
- 0 * * * * — every hour, on the hour.
- 0 0 * * * — every day at midnight.
- 0 9 * * 1-5 — weekdays at 09:00.
- 0 0 1 * * — first day of every month at midnight.
- 30 2 * * 0 — Sundays at 02:30.
The gotcha: day-of-month OR day-of-week
Here is the rule that surprises almost everyone. When you restrict both the day-of-month field and the day-of-week field, standard cron runs the job when either one matches — not both. So 0 0 13 * 5 does not mean "Friday the 13th"; it fires on every 13th and on every Friday. If you need the intersection, check one condition inside your script instead.
Verify before you deploy
The cheapest cron bug to fix is the one that never ships. Paste your expression into our Cron Expression Generator to see it decoded into plain English along with the next three times it would actually fire — in your local timezone, so mismatches jump out immediately.