Quick answer
The cron expression for every 15 minutes is */15 * * * *. The step */15 in the minute field matches 0, 15, 30 and 45, so the job runs on every quarter hour: four times an hour and 96 times a day. The list 0,15,30,45 * * * * is exactly equivalent, and some teams find it easier to read.
- Live next runs
- Any time zone
- Field-by-field breakdown
- Seven platform snippets
- Daylight saving aware
How to use this schedule
- 1Copy
*/15 * * * *with the Copy expression button. - 2Check Next runs in your time zone to confirm it fires when you expect, including around daylight saving changes.
- 3Pick your platform under Use it on your platform and copy the ready-made crontab line, workflow, manifest or timer.
- 4Need a different time or day? Click Customize to open it in the cron expression generator and change any field.
What does */15 * * * * mean?
*/15 takes the minute range 0–59 and keeps every fifteenth value starting at 0, which leaves exactly the quarter hours. Four values, evenly spaced, and the gap from :45 to the next :00 is also 15 minutes because 15 divides 60.
The step and the list are interchangeable, and you can shift the whole pattern by starting the range later:
| Expression | Runs at |
|---|---|
*/15 * * * * | :00, :15, :30, :45 |
0,15,30,45 * * * * | :00, :15, :30, :45 |
5-59/15 * * * * | :05, :20, :35, :50 |
7-59/15 * * * * | :07, :22, :37, :52 |
Use the list when you want readers to see the exact minutes at a glance; use the step when you might change the interval later.
Why run a job every 15 minutes?
Quarter hours are a natural bucket for reports, charts and usage summaries, so a lot of aggregation work runs on this rhythm. The expert move is to run a couple of minutes after each boundary rather than exactly on it.
A job at :15 that summarizes 10:00–10:15 starts while events stamped 10:14:59 may still be in flight. Schedule it with 2-59/15 * * * * (runs at :02, :17, :32, :47) and have it process the window that just closed. Late data lands in the right bucket, and you also step away from the burst of other jobs firing at :00, :15, :30 and :45.
At 96 runs a day this is a light schedule for most work. If a single run can take longer than 15 minutes, though (a large export, a slow backup), it will collide with the next one. Add a lock or move to every 30 minutes. For tighter feedback, every 10 minutes gives 144 runs a day.
What does each field in */15 * * * * mean?
| Field | Value | Allowed | Meaning |
|---|---|---|---|
| Minute | */15 | 0–59 | every 15 minutes: :00, :15, :30 and :45 |
| Hour | * | 0–23 | every hour |
| Day of month | * | 1–31 | every day of the month |
| Month | * | 1–12, JAN–DEC | every month |
| Day of week | * | 0–7 (0 and 7 are Sunday), SUN–SAT | every day of the week |
Read together: On every quarter hour (:00, :15, :30 and :45), every hour of every day.
How do I adjust */15 * * * * to my own schedule?
Small edits to */15 * * * * cover most real-world needs:
| Expression | What it does |
|---|---|
0,15,30,45 * * * * | The same quarter-hour schedule as an explicit list |
2-59/15 * * * * | Two minutes after each quarter hour, so late data for the previous window has arrived |
*/15 9-17 * * 1-5 | Every 15 minutes from 09:00 to 17:45 on weekdays |
*/15 * * * 0,6 | Every 15 minutes on weekends only |
*/30 * * * * | Every 30 minutes, half as often |
Need something else? Click Customize at the top of the page to open this schedule in the cron expression generator and change any field.
Related schedules: Every 10 minutes · Every 30 minutes · Every hour · Business hours (every hour)
Browse all schedules in the cron schedule library.
How do I run */15 * * * * in crontab, GitHub Actions, Kubernetes and the cloud?
| Platform | Write it as | Time zone |
|---|---|---|
| Linux crontab | */15 * * * * | Server's time zone; CRON_TZ= in cronie |
| GitHub Actions | - cron: "*/15 * * * *" | UTC by default; add timezone: (IANA name) |
| Kubernetes CronJob | schedule: "*/15 * * * *" | Set timeZone: (1.27+) |
| Cloudflare Workers | */15 * * * * | UTC only; numbers weekdays from 1 = Sunday, so use names |
| Vercel Cron Jobs | */15 * * * * | UTC only; more than once a day needs Pro (Hobby: once a day) |
| AWS EventBridge Scheduler | cron(*/15 * * * ? *) | Takes a time zone; legacy scheduled rules are UTC only |
| systemd timer | OnCalendar=*-*-* *:0/15:00 | Add a zone after the time, e.g. Europe/London |
In a crontab (crontab -e), the full line looks like this:
*/15 * * * * /path/to/job.sh >> /var/log/job.log 2>&1The live panel at the top of the page builds complete, copy-ready files for each platform (workflow, CronJob manifest, wrangler.toml, vercel.json, AWS CLI and systemd units) and can shift the schedule to UTC for platforms that need it.
What can go wrong with */15 * * * *?
- A job that summarizes the last quarter hour and runs exactly at :15 can miss events still being written. Run at
2-59/15and process the window that just closed. */15in the hour field is a different schedule entirely:0 */15 * * *runs at 00:00 and 15:00 only.- Quarter hours are popular, so shared databases and rate-limited APIs see bursts at :00, :15, :30 and :45. Offsetting by a few minutes costs nothing.
- If a run can take more than 15 minutes, guard it with
flock -n /tmp/job.lock your-commandor choose a longer interval. - In a zone with daylight saving time, a schedule with
*in the minute or hour field follows the wall clock: the spring-forward night loses an hour of runs and the fall-back night repeats one. Servers on UTC never see this.
Frequently asked questions
Last updated by the Playxoft engineering team.