Cron expression for every 10 minutes
The cron expression */10 * * * *
runs every 10 minutes. The restricted fields are minute */10; the remaining asterisks match anything. That works out to 144 runs per day.
*/10 * * * * Field breakdown
| Field | Value | Meaning |
|---|---|---|
| Minute | */10 | Every 10 minutes, counted from 0: 0, 10, 20, 30, 40, 50 |
| 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 */10 * * * * — 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 10 minutes": 144 runs per day. Within every hour it fires at :00, :10, :20, :30, :40, :50. Sixty divides by 10 without a remainder, so the gap between runs stays constant as the hour rolls over.
When to use every 10 minutes
Ten minutes halves the invocation count of a five-minute job while keeping data fresh enough for dashboards, webhook retries, and system-to-system syncs where nobody is watching the clock second by second. It is the interval to pick when a five-minute poll is being throttled upstream, or is costing more than the extra freshness is worth. Because the step always includes minute 0, jobs on this cadence pile up at the top of the hour alongside everything else on the host; an explicit offset list is worth the extra characters on busy infrastructure.
Common mistakes with every 10 minutes
The trap here is the top of the hour. Because the step is anchored at 0, this schedule fires at :00 alongside every hourly, two-hourly and daily job on the same host — a thundering herd that turns a ten-second job into a two-minute one at exactly the moment the machine is busiest. The fix is not a smaller interval, it is an offset: 5,15,25,35,45,55 keeps the cadence and dodges the crowd. The other slip is writing 10 * * * * by mistake, which drops the job from 144 runs a day to 24, at ten past each hour.
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: '*/10 * * * *'
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: "*/10 * * * *"
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": "*/10 * * * *"
}
]
} - • 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
*/10 * * * * /path/to/command
# With logging:
*/10 * * * * /path/to/command >> /var/log/cron.log 2>&1 Variations
-
*/5 * * * *Every 5 minutes Twice the frequency, at the practical floor for hosted schedulers. Take it when ten minutes of staleness turns out to be visible to someone. -
*/15 * * * *Every 15 minutes A slower, still sub-hourly cadence at 96 runs a day. The next step down when the ten-minute poll is mostly finding nothing new. -
*/10 * * * 1-5Every 10 minutes, Monday through Friday The same ten-minute cadence, but only Monday through Friday. Removes 28 percent of the invocations at no cost when the weekend produces no work. -
5,15,25,35,45,55 * * * *At 5, 15, 25, 35, 45, and 55 minutes past the hour The same ten runs an hour, shifted five minutes off the top. The list form is the only way to break the step's anchor at minute 0.
Frequently asked questions
How do I read the cron expression */10 * * * *?
Read the five space-separated fields left to right as minute, hour, day of month, month, and day of week. In */10 * * * * the minute is */10, 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 10 minutes", and a scheduler that checks all five fields once a minute will start the job 144 runs per day.
What timezone does */10 * * * * run in?
Less than you would think. Because the hour field is unrestricted, the cadence is the same in every timezone — 144 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.
How do I offset a 10-minute schedule away from the top of the hour?
Replace the step with an explicit list, because */10 always includes minute 0. A list such as 5,15,25,35,45,55 keeps the same ten-minute cadence while shifting every run five minutes later, which spreads load away from the top of the hour when dozens of jobs across a fleet all fire at :00. Offsetting is worth doing on shared infrastructure and on GitHub Actions, where workflows scheduled at the top of the hour queue behind everyone else and can be delayed by several minutes. The list form is longer to read but explicit and portable across every scheduler.
Related cron schedules
-
* * * * *Every minute -
*/5 * * * *Every 5 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.