To run a cron job every 15 minutes, use:
*/15 * * * *
It fires at minutes 0, 15, 30 and 45 of every hour: 96 times a day. In a crontab:
*/15 * * * * /usr/local/bin/poll.sh >> /var/log/poll.log 2>&1
What each field means
| Field | Value | Meaning |
|---|---|---|
| Minute | */15 | every 15th minute, starting at 0 |
| Hour | * | every hour |
| Day of month | * | every day |
| Month | * | every month |
| Day of week | * | every day of the week |
Variants
| Schedule | Expression |
|---|---|
| Every 15 minutes, written out | 0,15,30,45 * * * * |
| Every 15 minutes, offset to :05, :20, :35, :50 | 5-59/15 * * * * |
| Every 15 minutes from 8:00 to 18:45 | */15 8-18 * * * |
| Every 15 minutes on weekdays, business hours | */15 9-17 * * 1-5 |
| Jenkins, spread across the hour | H/15 * * * * |
| Quartz (seconds first) | 0 0/15 * * * ? |
Spring @Scheduled | 0 */15 * * * * |
| AWS EventBridge | rate(15 minutes) or cron(0/15 * * * ? *) |
Platform notes
- Linux crontab: local server time. Use absolute paths, since cron's
PATHis much shorter than your shell's. - GitHub Actions: allowed (the minimum is every 5 minutes). Schedules run in UTC unless you set a
timezone, only on the default branch, and may be delayed. See GitHub Actions cron. - Kubernetes CronJob:
schedule: "*/15 * * * *", interpreted in the kube-controller-manager's time zone unless you set.spec.timeZone. - Cloudflare Cron Triggers: works as written, in UTC. Changes can take up to 15 minutes to reach Cloudflare's network.
- Vercel: Pro or Enterprise; Hobby is limited to a daily run.
- Jenkins:
H/15 * * * *keeps the 15-minute spacing but picks a stable offset per job, so dozens of jobs don't all start at :00. See Jenkins cron.
Common mistakes
- *`15 * * `* runs once an hour, at minute 15.
- *`/15
in the hour field** (0 /15 * *`) runs at 00:00 and 15:00 only. - Overlap. If a run can last more than 15 minutes, use
flock -norconcurrencyPolicy: Forbid.
Running an AI agent every 15 minutes
Fine for a monitor that has to catch something within the hour, but keep the prompt short since it runs 96 times a day. A working-hours window such as */15 9-17 * * 1-5 cuts that to 36 runs a weekday. The scheduled skills page shows how to put a Claude Code or Codex skill on a schedule.
Questions
Is */15 the same as 0,15,30,45?
Yes, in the minute field both give minutes 0, 15, 30 and 45. The list form is handy when you want uneven times, such as 5,20,35,50.
Can I check */15 * * * * on Crontab guru?
Yes. Crontab guru (crontab.guru), the editor GitHub's and Kubernetes' docs both point to, shows a five-field expression in plain English. Quartz expressions with a seconds field and Jenkins H are different dialects, so check those against their own docs.
How do I run every 15 minutes starting at 5 past?
Use 5-59/15 * * * * (or 5,20,35,50 * * * *). The step counts from the start of the range you give it.
Does GitHub Actions run */15 exactly on time?
Not always. Scheduled workflows can be delayed during busy periods, and the top of the hour is the busiest, so the :00 run is the one most likely to start late.