Cron syntax looks like line noise until you learn the five fields. Once it clicks, you can read (and write) any schedule at a glance — and stop accidentally running a job every minute.

The five fields

A cron expression is five space-separated fields, always in this order: minute, hour, day-of-month, month, day-of-week. Each field can be a specific number, a range, a list, a step, or an asterisk meaning "every".

FieldValues
Minute0–59
Hour0–23
Day of month1–31
Month1–12
Day of week0–6 (Sun–Sat)
Build one now

Pick your schedule visually and get the exact expression plus a plain-English explanation.

Open Cron Expression Generator

Reading common examples

  • * * * * * — every single minute (rare in production, mostly for testing).
  • 0 * * * * — the top of every hour.
  • 0 0 * * * — once a day, at midnight.
  • 0 9 * * 1-5 — 9am, Monday through Friday only.
  • 0 0 1 * * — midnight on the first of every month.

The mistake almost everyone makes once

Leaving the minute field as * when you meant a specific time. * 9 * * * doesn't mean "9am" — it means "every minute during the 9am hour," so your job fires 60 times. Always set an explicit minute (0 9 * * *) for anything that should run once.

Day-of-month and day-of-week interact oddly

If you fill in both day-of-month and day-of-week (not *), most cron implementations treat it as OR, not AND — the job runs if either condition matches. This trips people up when they expect "the 1st, but only if it's a Monday." Leave one of the two fields as * to avoid the ambiguity.

Testing before you deploy

The safest habit is to generate the expression, then read back its plain-English meaning before you commit it to a crontab or a CI pipeline. A schedule that's wrong by one field can mean a backup job that never runs, or a report that spams every minute. Our generator does that translation for you and runs entirely in your browser.

F
freetoolzhub team

We build fast, private, watermark-free tools for everyone. Follow along for tips and updates.