Cron Every 45 Minutes

A true "every 45 minutes" schedule cannot be written as one standard cron expression, because cron evaluates each field independently within its range (minutes reset every hour) and 45 does not divide evenly into 60. Avoid */45 — it fires at :00 and :45 then waits only 15 minutes, not 45. The reliable pattern repeats on a 3-hour cycle that 45 divides into evenly.

Cron Expression
0,45 0-23/3 * * *

Field Breakdown

FieldValueMeaning
Minute0,45At minute 0 and 45
Hour0-23/3Combined with the minutes, yields a true 45-minute cycle
Day of Month*Every day (1-31)
Month*Every month (1-12)
Day of Week*Every day of the week (0-6)

Variations

*/45 * * * *COMMON MISTAKE — fires at :00 and :45, so gaps alternate 45 then 15 minutes
0 0,9,18 * * *Exact 45-min cadence (line 1 of 2 — pair with: 45 4,13,22 * * *)

Common Use Cases

  • Tasks that should run slightly less often than hourly
  • Spacing out API calls to avoid rate limits
  • Offsetting a job from the busy top-of-hour window

Tips & Best Practices

If approximate timing is acceptable, every 30 or every 60 minutes is far simpler and is what most setups actually want.

Do not use */45 expecting an even interval — it does not produce one.

When an exact 45-minute gap matters, a small wrapper script with sleep, or a real scheduler (systemd timers), is cleaner than fighting cron.

Related Intervals