*/5 * * * * — What does this cron expression mean?
*/5 * * * * is the most common “near real-time” cron schedule: frequent enough for health checks and queue sweeps, sparse enough that a job taking a minute or two will not overlap itself. It is also exactly the shortest interval GitHub Actions allows, which makes it a frequent source of “why didn't my workflow run?” questions.
*/5 * * * *
Run the job every 5 minutes: at minute 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50 and 55 of every hour.
Frequency: 12 runs per hour, 288 per day. cronstrue reads it as “Every 5 minutes”.
Open */5 * * * * in the Cron BuilderField-by-field breakdown
*/5
Minute
0–59
*
Hour
0–23
*
Day of month
1–31
*
Month
1–12
*
Day of week
0–6
- Minute*/5 — every 5th minute starting at 0: 0, 5, 10 … 55. Same as 0-59/5.
- Hour* — every hour.
- Day of month* — every day of the month.
- Month* — every month.
- Day of week* — every day of the week.
Next run times
Example: if it is Monday, 5 Jan 2026, 09:07 UTC, the next runs of */5 * * * * (UTC) are:
- #1Mon, 5 Jan 2026, 09:10 UTC
- #2Mon, 5 Jan 2026, 09:15 UTC
- #3Mon, 5 Jan 2026, 09:20 UTC
- #4Mon, 5 Jan 2026, 09:25 UTC
- #5Mon, 5 Jan 2026, 09:30 UTC
Live times from your current clock replace this example once the page loads. Cron uses the scheduler's timezone; most cloud servers, GitHub Actions and AWS EventBridge rules use UTC.
*/5 * * * * in Quartz, AWS, GitHub Actions, Kubernetes and systemd
Crontab (Linux / macOS)
*/5 * * * * /usr/local/bin/job.sh >> /var/log/job.log 2>&1Standard 5-field syntax used by Vixie cron, cronie, busybox crond and most libraries (node-cron, APScheduler, robfig/cron).
Quartz (6 and 7 fields)
0 0/5 * * * ?
0 0/5 * * * ? *
# Spring @Scheduled
@Scheduled(cron = "0 */5 * * * *")In Quartz and Spring the first field is seconds. A common mistake is writing 0/5 * * * * ? in Quartz, which means every 5 seconds, not every 5 minutes.
AWS EventBridge
cron(0/5 * * * ? *)
# interval alternative
rate(5 minutes)Use rate(5 minutes) when you only care about the interval. Use cron(0/5 …) if other systems expect runs on the 5-minute marks.
GitHub Actions
on:
schedule:
# Every 5 minutes, evaluated in UTC
- cron: '*/5 * * * *'5 minutes is GitHub's minimum, but don't rely on it: scheduled workflows are queued and are often 5–15 minutes late, so consecutive runs can be anywhere from a few minutes to much more than 5 apart.
Kubernetes CronJob
apiVersion: batch/v1
kind: CronJob
metadata:
name: every-5-minutes
spec:
schedule: "*/5 * * * *"
timeZone: "Etc/UTC"
concurrencyPolicy: Forbid
startingDeadlineSeconds: 120
jobTemplate:
spec:
template:
spec:
restartPolicy: OnFailure
containers:
- name: job
image: alpine:3.20
command: ["/bin/sh", "-c", "echo running"]A short deadline drops a run that could not start within 2 minutes instead of starting it late and overlapping the next one.
systemd timer
# /etc/systemd/system/myjob.timer
[Unit]
Description=Every 5 minutes
[Timer]
OnCalendar=*:0/5
Persistent=true
[Install]
WantedBy=timers.targetsystemd also offers OnUnitActiveSec=5min, which measures 5 minutes from the last activation instead of aligning to the clock.
When to use every 5 minutes
- Uptime and health checks that page someone after two consecutive failures.
- Sweeping a jobs table for stuck or orphaned rows.
- Pushing metrics from a box that cannot run a full agent.
- Renewing locks or heartbeats with a 10–15 minute TTL.
Common pitfalls with */5 * * * *
GitHub Actions will not keep a 5-minute rhythm
GitHub queues scheduled workflows and starts them when runners are free. In practice a */5 workflow often runs every 10–20 minutes during busy periods, and GitHub disables schedules in public repositories after 60 days without activity. For anything that truly needs 5-minute precision, use a real scheduler.
Seconds field confusion when porting to Quartz or Spring
Copying */5 * * * * into a 6-field scheduler shifts every field left by one. In Spring, */5 * * * * * means every 5 seconds, 60 times more often than intended. Always add the leading seconds 0 when porting.
# crontab: every 5 minutes
*/5 * * * *
# Spring @Scheduled: every 5 minutes
0 */5 * * * *
# Spring @Scheduled: every 5 SECONDS (wrong)
*/5 * * * * *Stagger the start minute on shared infrastructure
Many teams pick */5, so :00, :05, :10 … are busy minutes on shared databases and APIs. Using 2-59/5 (minutes 2, 7, 12 …) keeps the same frequency off the crowded marks.
2-59/5 * * * * /usr/local/bin/healthcheck.shRelated cron expressions
Need a different schedule? Paste */5 * * * * into the Cron Builder and edit it, browse all cron expressions, read the cron syntax guide or copy from the cron examples list.
Frequently Asked Questions
What does */5 * * * * mean?▾
Every 5 minutes. The minute field */5 matches 0, 5, 10 … 55 and every other field is *, so the job runs 12 times an hour and 288 times a day, aligned to the clock.
What is the Quartz cron expression for every 5 minutes?▾
0 0/5 * * * ? (6 fields) or 0 0/5 * * * ? * (7 fields with year). The leading 0 is seconds. Spring's @Scheduled uses 0 */5 * * * *.
Can GitHub Actions run a workflow every 5 minutes?▾
You can write cron: '*/5 * * * *' and GitHub accepts it, since 5 minutes is the minimum interval. Runs are best-effort, though: they are frequently delayed and can be skipped under heavy load, so treat it as “roughly every 5–15 minutes”.