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

Cron Expression: Every 90 Minutes

There is no clean single-line cron for every 90 minutes — it crosses the hour boundary and doesn't align to the clock. Here is why, and two workarounds.

Why there is no clean expression

90 minutes is 1.5 hours, so it never lands on the same minute each hour. Cron has no field for “every 90 minutes” because the hour and minute fields are independent. Any single line either fires too often or drifts.

Option 1: list the clock times over a 3-hour cycle

90 min × 2 = 3 hours, so the pattern repeats every 3 hours. Fire at :00 of even 3-hour blocks and :30 of the ones in between: 0 0,3,6,9,12,15,18,21 * * * and 30 1,4,7,10,13,16,19,22 * * * — two lines that together fire every 90 minutes.

Option 2: run hourly (or every 30 min) and gate in the script

Schedule */30 * * * * and skip until 90 minutes have passed since the last real run, tracked with a timestamp file. One crontab line, logic in code.

Recommendation

Use the two-line clock-time version when start times must be exact; use the script-gated version when you just want roughly-90-minute spacing.

FAQ

Why doesn't a single cron line do every 90 minutes?

90 minutes is 1.5 hours and never repeats on the same minute each hour, and cron's hour and minute fields are independent, so no single expression captures it.

What two lines give me every 90 minutes?

0 0,3,6,9,12,15,18,21 * * * and 30 1,4,7,10,13,16,19,22 * * * — together they fire every 90 minutes over a repeating 3-hour cycle.

Is there a simpler way?

Run */30 * * * * and have the script skip runs until 90 minutes have elapsed since the last real execution.