Cron Every 5 Minutes
To run cron every 5 minutes, use */5 * * * *. Change the interval below for every 10, 15, 20 or 30 minutes, and see the next runs and the platform limits that apply.
The short answer
The cron expression to run every 5 minutes is */5 * * * *. The slash sets a step of 5 in the minute field, so the job runs at minutes 0, 5, 10 and so on up to 55, in every hour of every day.
*/5 * * * *Runs every 5 minutes.
Pick the interval
Choose an interval or type your own, then pick the platform to get the matching syntax and the next run times.
How */5 * * * * works
Only the minute field has a value. The slash step */5 means "every fifth value starting at the first one the field allows", which for minutes is 0, so the matches are 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55. The four other fields are *, so no other condition applies.
The step counts from the top of the hour, not from the moment you deploy. If you save the job at 10:03, its first run is at 10:05. See the cron special characters reference for how steps behave in each field.
Cron every 10, 15, 20 and 30 minutes
The same pattern gives every common interval. These all divide an hour evenly, so the gap between runs is always the same.
| Expression | What it does | Use |
|---|---|---|
*/5 * * * * | Runs every 5 minutes. Minutes 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55. | Open |
*/10 * * * * | Runs every 10 minutes. Minutes 0, 10, 20, 30, 40, 50. | Open |
*/15 * * * * | Runs every 15 minutes. Minutes 0, 15, 30, 45. | Open |
*/20 * * * * | Runs every 20 minutes. Minutes 0, 20, 40. | Open |
0,30 * * * * | Runs at minutes 0 and 30 of every hour. Minutes 0, 30. | Open |
Intervals of 1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30 and 60 minutes divide an hour evenly. For other values, read the next section.
Intervals that do not divide 60
Cron has no memory of the last run. A step restarts at minute 0 of every hour, so */7 * * * * runs at minutes 0, 7, 14, 21, 28, 35, 42, 49, 56 and then again at 0, which leaves a 4 minute gap before the hour. CronWave flags this: Every 7 minutes does not divide an hour evenly. Runs happen at :00, :07, :14, :21, :28... then restart at :00, so the last gap each hour is shorter.
For a true 7 or 45 minute interval, run the job every 1 or 5 minutes and let it decide whether enough time has passed, or use a scheduler with interval support such as an EventBridge rate expression.
Offset the start to avoid the busy minute
Everyone schedules on the hour, so :00 and :05 are crowded. GitHub says high-load periods include the start of every hour and that runs can be delayed or dropped. A range with a step moves your job to quieter minutes while keeping the interval:
| Expression | What it does | Use |
|---|---|---|
3-58/5 * * * * | Runs every 5 minutes from minute 3 to 58 of every hour. Minutes 3, 8, 13 and so on. Keeps clear of the :00 and :05 crowd. | Open |
Cron every 5 minutes on each platform
The same schedule, written by CronWave for each platform, with the one thing to watch on each.
| Platform | Expression | Note |
|---|---|---|
| Linux / Unix | */5 * * * * | Runs in the system time zone. Linux guide |
| Kubernetes | */5 * * * * | Pair with concurrencyPolicy: Forbid. Kubernetes guide |
| GitHub Actions | */5 * * * * | Five minutes is the shortest interval GitHub allows, and runs can be late. GitHub Actions guide |
| Vercel | */5 * * * * | Not on the Hobby plan, which allows one run per day. Vercel guide |
| AWS EventBridge | cron(*/5 * * * ? *) | A rate expression, rate(5 minutes), is the simpler way to say this. AWS guide |
| Quartz | 0 */5 * * * ? | The leading 0 is the seconds field. Quartz guide |
Stop runs from overlapping
If a run takes longer than the interval, a second one starts before the first finishes. That is the most common failure of short schedules. Pick the guard for your platform:
- Linux: wrap the command in
flock -n /tmp/job.lockso a second copy exits immediately. - Kubernetes: set
concurrencyPolicy: Forbid, which skips a run while the previous Job is still running. - GitHub Actions: use a
concurrencygroup so a new run waits or replaces the old one. - Vercel: use a lock such as a Redis lock, shorten the job, or lengthen the interval.
Also ask whether polling every five minutes is the right design. A webhook or queue reacts immediately and costs nothing between events.
Sources and further reading
Use a tool
Try the schedule from this page in a tool.