*/15 * * * *Fields
| Minute | */15 | 0, 15, 30, 45 |
|---|---|---|
| Hour | * | any |
| Day of month | * | any |
| Month | * | any |
| Day of week | * | any |
Where to use it
| crontab | */15 * * * * /path/to/script.sh |
|---|---|
| GitHub Actions | - cron: "*/15 * * * *" (on.schedule) |
| Kubernetes CronJob | schedule: "*/15 * * * *" |
crontab runs in the server’s time zone; GitHub Actions always uses UTC.
Good to know
*/15 runs at minutes 0, 15, 30 and 45 of every hour, the same as 0,15,30,45. Because 15 divides 60 evenly, the spacing is exact; a step that doesn’t, such as */25, runs at 0, 25 and 50, then at 0 again, leaving a 10-minute gap at the top of the hour. Every 30 minutes is */30, and every 20 minutes is */20.
Quarter-hour jobs often sync data or send reports, and a slow API can push a run past 15 minutes; flock -n stops a second copy from starting. Schedules finer than an hour are barely affected by daylight saving changes, unlike jobs at fixed times of day. Redirect output to a log file, and remember that cron gives you a minimal PATH without your shell profile.