Cron expression for every 5 minutes
The cron expression */5 * * * *
runs every 5 minutes. The restricted fields are minute */5; the remaining asterisks match anything. That works out to 288 runs per day.
*/5 * * * * Field breakdown
| Field | Value | Meaning |
|---|---|---|
| Minute | */5 | Every 5 minutes, counted from 0: 0, 5, 10, 15, 20, 25, … |
| Hour | * | Every hour (0–23) |
| Day of month | * | Every day of the month (1–31) |
| Month | * | Every month (1–12) |
| Day of week | * | Every day of the week (0–6) |
Next runs
- —
- —
- —
- —
- —
Run times are calculated in your browser timezone. The scheduler that executes the job uses its own — always UTC on Vercel Cron, UTC by default on GitHub Actions, the host clock on crontab.
How this schedule works
Cron evaluates the five fields of */5 * * * * — minute, hour, day of month, month, day of week — against the clock once a minute and starts the job on any minute where all five match, which cronstrue reads as "Every 5 minutes": 288 runs per day. Within every hour it fires at :00, :05, :10, :15, :20, :25, :30, :35, :40, :45, :50, :55. Sixty divides by 5 without a remainder, so the gap between runs stays constant as the hour rolls over.
When to use every 5 minutes
Five minutes is the practical floor for hosted schedulers, and it is the interval most polling jobs settle on: 288 runs a day keeps an external feed or a cache reasonably fresh without hammering the upstream. It suits sync jobs whose source changes slowly and whose consumers tolerate a few minutes of staleness. Before committing to it, check that a single run finishes comfortably inside five minutes — overlapping invocations are the usual failure mode at this cadence, and cron will not hold one back to wait for the last.
Common mistakes with every 5 minutes
Two things go wrong at this cadence. The first is expecting */5 to mean "five minutes from now" — it means minutes 0, 5, 10 and so on, anchored to the top of the hour, so a crontab installed at 12:03 fires at 12:05 rather than 12:08. The second is drift into overlap. A five-minute job that grows into a six-minute job never announces itself; it just starts running two copies. Log the duration of every run and alert when it crosses half the interval, long before it crosses the whole one.
Platform snippets
The same expression, ready to paste into the four schedulers that read five-field cron. The notes below each snippet are the ones that follow from this schedule; the cron expression generator lists every caveat for every platform.
GitHub Actions
name: Scheduled workflow
on:
schedule:
- cron: '*/5 * * * *'
workflow_dispatch:
jobs:
scheduled:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run job
run: echo "Running scheduled job" Kubernetes CronJob
apiVersion: batch/v1
kind: CronJob
metadata:
name: my-cron-job
spec:
schedule: "*/5 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: job
image: my-image:latest
command: ["/bin/sh", "-c", "echo Running"]
restartPolicy: OnFailure Vercel Cron
Hobby plan limitation: cron jobs can only run once per day. Schedules more frequent than daily will fail to deploy on Hobby. Use Pro plan or above for higher frequency.
{
"$schema": "https://openapi.vercel.sh/vercel.json",
"crons": [
{
"path": "/api/cron",
"schedule": "*/5 * * * *"
}
]
} - • Pro plan and above: invocations occur within the specified minute (e.g. "5 8 * * *" runs between 08:05:00 and 08:05:59).
crontab
# Edit your crontab: crontab -e
*/5 * * * * /path/to/command
# With logging:
*/5 * * * * /path/to/command >> /var/log/cron.log 2>&1 Variations
-
*/10 * * * *Every 10 minutes The same pattern at half the load: 144 runs a day instead of 288. Reach for it when the upstream starts rate-limiting. -
*/15 * * * *Every 15 minutes Quarter-hourly, at :00, :15, :30 and :45. A third of the invocations, and still fresh enough for most dashboards. -
*/5 9-17 * * 1-5Every 5 minutes, between 09:00 AM and 05:59 PM, Monday through Friday Keeps the five-minute resolution but only during working hours on weekdays, which is 108 runs a day rather than 288. -
5 * * * *At 5 minutes past the hour A single run each hour at five past. Worth contrasting: dropping the asterisk turns a step into a literal, and 288 runs a day into 24.
Frequently asked questions
How do I read the cron expression */5 * * * *?
Read the five space-separated fields left to right as minute, hour, day of month, month, and day of week. In */5 * * * * the minute is */5, hour is *, day of month is *, month is *, day of week is *. Of the operators cron defines, this expression uses only the ones that matter here: an asterisk matches every value in its field and a slash introduces a step counted from the start of the field. Put together, cronstrue reads the whole thing as "Every 5 minutes", and a scheduler that checks all five fields once a minute will start the job 288 runs per day.
What timezone does */5 * * * * run in?
Less than you would think. Because the hour field is unrestricted, the cadence is the same in every timezone — 288 runs per day, wherever the scheduler's clock is set. The zone changes the labels on the run times rather than the schedule. It still matters at the edges. GitHub Actions evaluates schedules in UTC unless the workflow adds the optional timezone key beside cron; Vercel Cron is UTC-only; a Kubernetes CronJob follows the kube-controller-manager's zone unless spec.timeZone is set; and a crontab follows the host clock or CRON_TZ. The edge that bites is daylight saving: in a zone that shifts its clocks, the spring-forward hour never arrives and the fall-back hour arrives twice, so a schedule like this one loses or repeats a whole block of runs on those two days a year. Scheduling in UTC avoids it.
Does */5 * * * * run at :00?
The schedule fires at :00 and then every fifth minute after it: :05, :10, :15, and so on through :55. Step values in cron count from the start of the field range, which for the minute field is 0 — they do not count from the moment you install the crontab. That is why the run times are stable across restarts and identical on every host. The same rule explains why an uneven step such as */7 fires at :00, :07, :14, :21, :28, :35, :42, :49, and :56, then restarts at :00 of the next hour instead of continuing the sequence.
Related cron schedules
-
* * * * *Every minute -
*/10 * * * *Every 10 minutes -
*/15 * * * *Every 15 minutes -
*/30 * * * *Every 30 minutes -
0 * * * *Every hour -
0 */2 * * *Every 2 hours
Build a custom schedule in the cron expression generator, or browse every epochkit tool.