Cron every 15 minutes: why */15 * * * * runs on the clock

By TechCompare · Updated · How we check

Use */15 * * * * for a job that should run every 15 minutes. It works cleanly because 15 divides 60, so the gaps between runs stay even from one hour to the next.

Calculator

Next runs of */15 * * * *

Example from Mon, Nov 9, 2026 at 8:00 AM.

  1. Mon, Nov 9, 2026 at 8:15 AM
  2. Mon, Nov 9, 2026 at 8:30 AM
  3. Mon, Nov 9, 2026 at 8:45 AM
  4. Mon, Nov 9, 2026 at 9:00 AM
  5. Mon, Nov 9, 2026 at 9:15 AM

To run a cron job every 15 minutes, use */15 * * * *. In plain words, that's a job every quarter hour, around the clock. It fires at minutes 0, 15, 30, 45 of each hour, which comes to 96 runs a day. The marks come from the clock, not from how long the last run took.

Schedule pattern
Every 15 minutes
every-15-minutes
Category
Common Patterns
Standard cron expression patterns

How this is calculated

Cron reads five fields, and this schedule only changes the first one. The minute field */15 is a step: it starts at the field's lowest value, 0, and counts up by 15 until the field runs out. The other four fields are all *, which matches every value, so the job runs in every hour, on every date, in every month and on every day of the week. Here's a full line that appends the date to a log on each run:

crontab
*/15 * * * * date +\%F >> /var/log/poll.log 2>&1

The % needs care. Cron treats an unescaped percent sign as a line break, and crontab(5) says a % "will be changed into newline characters" unless a backslash escapes it. Everything after the first one goes to the command as standard input, so date +%F never reaches date whole. The backslash in \%F keeps the percent sign literal. A script file doesn't need the escape, since the rule only applies to the crontab line.

The step starts over at the top of each hour, and it's the first trap to know. */15 is safe because 15 divides 60, so every hour repeats the same marks. */45 is not a 45 minute interval. It matches minutes 0, 45, so the run at :45 is followed by the run at the top of the next hour 15 minutes later. crontab(5) says steps "are evaluated just within the field they are applied to", which explains it. For a true 45 minute interval, cron is the wrong tool, and cron vs systemd timers compares the two.

The schedule is also clock aligned, and it keeps no memory. If the server is down at the :15 mark, that run is lost, and nothing comes back to run it once the server is up. If a missed run matters, the job has to cope with that. Have it save the time of its last successful run, then handle everything since then on its next run.

Cron also reads the server's time zone by default, so the :00, :15, :30 and :45 marks are server time, which may not match your own clock. Cron time zone pitfalls covers how to set the zone and what daylight saving time does to it.

The 5 minute schedule, */5 * * * *, runs more often than this one, 288 times a day against 96. The 30 minute schedule, */30 * * * *, runs less often, at 48 times a day. A job that runs longer than 5 minutes overlaps itself on the 5 minute schedule, but this one gives it 15 minutes before the next start.

Verdict

Keep */15 * * * * for jobs that can wait up to a quarter hour, such as polling an API, refreshing a cache or syncing a mailbox. A change that lands just after a run waits almost 15 minutes for the next one, so check that wait first. If the wait has to be shorter, use a smaller step, like 10 or 5, instead of stretching this one. Skip it for anything that has to react in seconds.

More Cron scenarios

Every 5 minutes
Running a cron job every 5 minutes uses the step operator in the minute field: */5 * * * *.
View details
Every hour
To run a job at the top of every hour, use 0 * * * *.
View details
Daily at midnight
0 0 * * * runs a job at exactly midnight (00:00) every day.
View details

Frequently asked questions

How do I run a cron job every 15 minutes?
Put */15 * * * * in front of your command, such as */15 * * * * /path/to/job. The job then starts at minutes 0, 15, 30, 45 of every hour. Cron has no special string for a quarter hour, so the step expression is the usual way to write it.
Why does */45 not run every 45 minutes?
Because the step starts over at the top of each hour. */45 matches minutes 0, 45, so the run at :45 is followed by a run 15 minutes later. If the job needs a true 45 minute gap, cron is the wrong tool for it.
How many times a day does it run?
96 runs a day, which is 4 runs an hour across 24 hours. Multiply that count by what one run costs, such as API calls or disk writes, before you commit to the schedule.
Why does my cron line with date +%F fail?
Cron reads the unescaped % as a line break and cuts the command short. In the crontab, put a backslash before the percent sign, as in date +\%F. A script file doesn't need it, because a plain % works there.
Can I run it only at minutes 5, 20, 35 and 50?
Yes. Use 5-59/15 in the minute field. It starts at minute 5, steps by 15, and stops at the end of the field, so it matches minutes 5, 20, 35, 50. That's 4 runs an hour, at different minutes than the plain step.