Cron expression for every 15 minutes
Every 15 minutes.
Five fields for Linux, GitHub Actions and Kubernetes (minute hour day month weekday). Six or seven for Quartz. Nothing you type leaves your device.
What it means and when to use it
Quarter-hourly runs are a good rhythm for work that people notice but do not watch live: refreshing a dashboard, sending a digest of new form entries, checking a feed for new posts, rotating a small log. The runs fall on :00, :15, :30 and :45, so they are easy to match against a clock.
Watch out for this
The example that fills most questions is "every 15 minutes, but only in working hours". Add a range to the hour field: */15 9-17 * * 1-5 runs at every quarter hour from 09:00 to 17:45 on Monday to Friday. Note that the last run is at 17:45, not at 17:00, because the hour range 9-17 covers the whole of hour 17. If you want the last run at exactly 17:00 you need two lines: */15 9-16 * * 1-5 and 0 17 * * 1-5.
What each field says
| Field | Written | Means |
|---|---|---|
| Minute | */15 | 0, 15, 30, 45 |
| Hour | * | every hour |
| Day of month | * | every day of the month |
| Month | * | every month |
| Day of week | * | every day of the week |
An example of the next runs
If it were Friday 13 November 2026 at 10:20 UTC, the next six runs would be these. Times are shown in UTC and in India time (UTC+5:30).
| UTC | India time |
|---|---|
| Fri 13 Nov, 10:30 | Fri 13 Nov, 16:00 |
| Fri 13 Nov, 10:45 | Fri 13 Nov, 16:15 |
| Fri 13 Nov, 11:00 | Fri 13 Nov, 16:30 |
| Fri 13 Nov, 11:15 | Fri 13 Nov, 16:45 |
| Fri 13 Nov, 11:30 | Fri 13 Nov, 17:00 |
| Fri 13 Nov, 11:45 | Fri 13 Nov, 17:15 |
The same schedule in other places
Quartz
Quartz has a seconds field in front, uses ? in one day field, and counts Sunday as 1:
0 */15 * * * ?GitHub Actions
Scheduled workflows run in UTC unless you add a time zone. In the workflow file:
on:
schedule:
- cron: '*/15 * * * *'Kubernetes CronJob
In a CronJob manifest the schedule goes in spec.schedule. Without spec.timeZone, it is read in the time zone of the cluster's controller:
spec:
schedule: "*/15 * * * *"
timeZone: "Etc/UTC"A crontab line to copy
The command is made up. Replace it with your own and use full paths:
*/15 9-16 * * 1-5 /home/me/bin/digest.sh >> /home/me/digest.log 2>&1
0 17 * * 1-5 /home/me/bin/digest.sh >> /home/me/digest.log 2>&1Questions
Does */15 depend on when the crontab was saved?
No. Cron matches the clock, so the runs are always at minutes 0, 15, 30 and 45 whenever you saved the file.
This is an independent guide and tool. It is not connected with crontab.guru, Quartz, GitHub, Kubernetes, Spring or the Linux projects named here. Product names belong to their owners.