Cron expressions explained with schedules you actually use

Five fields, a few operators, and one famous trap. Work through real expressions — backups, business-hours checks, monthly jobs — and check the next run times.

Tools used in this guide

The job

Someone else's crontab says 30 9 * * 1-5 and you need to know exactly when it fires — or you are writing one and want to check it before deploying. Paste it into the explainer and read the description plus the next five run times.

Reading the five fields

Minute (0–59), hour (0–23), day of month (1–31), month (1–12 or JAN–DEC), day of week (0–7 or SUN–SAT; both 0 and 7 are Sunday). * means every value, a-b is a range, */n is every n, and commas list alternatives.

  • 0 9 * * 1-5 — 09:00, Monday through Friday: the weekday-morning backup.
  • */15 8-18 * * * — every 15 minutes from 08:00 to 18:59: a business-hours health check.
  • 0 0 1 * * — 00:00 on the 1st of every month: the monthly roll-up.
  • 0 3 * * SUN — 03:00 every Sunday: the quiet-window job.

The trap: day-of-month plus day-of-week is OR, not AND

When both day fields are restricted, cron runs when either matches. 0 0 1 * 1 fires on the 1st of the month and every Monday — not only on Mondays that are the 1st. The explainer shows the combined description so you can catch this before it fires eleven extra times a month.

Limits

This is the classic 5-field format: no seconds, no year field, no @daily shortcuts. Next-run times are shown in your device's time zone — many servers run cron in UTC or the server's local zone, so compare against that before assuming a job is late.