This is only possible with 3 separate crons:
# Every 15 minutes except for 3:00-3:59
*/15 0-2,4-23 * * * command
# 3:15, 3:30, 3:45
15-45/15 3 * * * command
# 3:00 dead
0 3 * * * other_commandCrontab evaluates each line independently. There's no way to say “every 15 minutes except these” in a single line — the minute field accepts a list (0,15,30,45), a step (*/15), and ranges, but it has no negation operator.
The pattern in the answer is the canonical workaround: split the day into two ranges of hours (0-2 and 4-23) and exclude the hour you don't want via the hour field. The second cron line handles the surviving slots within the excluded hour (3:15, 3:30, 3:45 — everything except 3:00). The third cron line schedules the conflicting job at exactly 3:00, ensuring it has the slot to itself.
A more advanced approach uses a wrapper script that exits early when the current time matches the exclusion window — but that hides the schedule from crontab -l, which often hurts more than it helps. Stick with multi-line cron when you want the schedule to be self-documenting, and use the multi-cron visualizer to confirm there's no overlap.
Read the dedicated guide: Cron every 15 minutes.
Other answers and worked examples for the most confusing cron expressions.
Ready to schedule it?
WordPress, Shopify, Railway, Cloud Run, Vercel, HubSpot, Ghost, your own box. If it answers HTTP, Crontap can drive it on a clock you can read, in the timezone that actually matters, and page you when something breaks.
Free forever tier ・ No credit card required
Schedule
“every 5 minutes”
Next run
in 23s
Permalink: https://tool.crontap.com/help/crontab-run-every-minute-except-at-hour