crontool
Paste a schedule, read it in English, see the next runs.

Cron Expression: Every 45 Minutes

There is no clean single-line cron for every 45 minutes — 45 doesn't divide evenly into 60. Here is why, and two reliable workarounds.

Why there is no clean expression

Cron's minute field only resets every hour (0–59). A step like */45 fires at :00 and :45, then jumps back to :00 of the next hour — that's a 15-minute gap, not 45. So */45 * * * * does not mean “every 45 minutes”.

Option 1: fixed clock times

If 45-minute spacing across a 3-hour cycle is fine, list the exact minutes and hours. Because 45 min × 4 = 3 hours, the pattern repeats every 3 hours: 0 0,3,6,9,12,15,18,21 * * *, 45 0,3,6,9,12,15,18,21 * * *, 30 1,4,7,10,13,16,19,22 * * *, 15 2,5,8,11,14,17,20,23 * * * — four lines that together fire every 45 minutes.

Option 2: run every 15 minutes, act every third time

Simplest in practice: schedule */15 * * * * and have the script itself skip 2 of every 3 runs using a counter or timestamp file. Fewer crontab lines, all logic in one place.

Recommendation

Use Option 2 unless you need the job to literally not start except on the 45-minute marks.

FAQ

Why doesn't */45 * * * * work for every 45 minutes?

The minute field resets each hour, so */45 fires at :00 and :45, then :00 again — a 15-minute gap. It only works if 45 divided 60 evenly, which it doesn't.

What is the cleanest way to run every 45 minutes?

Run */15 * * * * and let the script skip two of every three invocations, or use a four-line crontab that lists the exact clock times over a repeating 3-hour cycle.

Does the 3-hour pattern really repeat?

Yes. 45 minutes times 4 equals 180 minutes (3 hours), so the set of clock times repeats every 3 hours.