How to Read a Cron Expression (Without Guessing)
You open a config file, see 0 2 * * 1, and have no idea when that actually runs. I have written cron jobs for years and I still pause on the fourth field every single time.
Cron is not hard once someone shows you the shape of it. Here is how to read any expression in about ten seconds, the symbols that trip people up, and the day-of-week footgun that has caused real 3am pages.
The five fields, left to right
A standard cron expression is five fields separated by spaces:
┌── minute (0 - 59)
│ ┌── hour (0 - 23)
│ │ ┌── day of month (1 - 31)
│ │ │ ┌── month (1 - 12)
│ │ │ │ ┌── day of week (0 - 6, Sunday = 0)
│ │ │ │ │
0 2 * * 1So 0 2 * * 1 reads: minute 0, hour 2, any day of month, any month, on day-of-week 1 (Monday). In plain English: 2:00 AM every Monday.
The four symbols you need
*means "every".* * * * *is every minute.*/nmeans "every n".*/15 * * * *is every 15 minutes.a-bis a range.0 9-17 * * *is on the hour, 9am through 5pm.a,b,cis a list.0 0 * * 1,3,5is midnight on Mon, Wed, Fri.
Examples worth memorizing
*/5 * * * * every 5 minutes
0 * * * * every hour, on the hour
0 0 * * * every day at midnight
0 9 * * 1-5 9am, Monday to Friday
0 0 1 * * midnight on the 1st of every month
0 0 * * 0 midnight every Sunday
30 3 * * 6 3:30am every SaturdayThe gotcha that breaks schedules
This one bites people: when you set both the day-of-month and the day-of-week fields to something other than *, most cron implementations run the job when either matches, not both. So 0 0 13 * 5 does not mean "Friday the 13th". It means "the 13th of the month, OR any Friday". If you actually want Friday the 13th, cron alone cannot express it cleanly; you check the date inside your script.
Two more that cause confusion: cron runs in the server's timezone, not yours, so a "midnight" job may fire at a surprising local hour. And both 0 and sometimes 7 mean Sunday, depending on the system.
Stop translating in your head
Honestly, once you understand the fields, the fastest workflow is to not parse them manually at all. Build and read expressions in the cron expression generator, which shows a plain-English description as you go and has presets for the common schedules. I know the syntax and I still use it, because "is that every 15 minutes or at minute 15" is not a question I want to get wrong in production.
FAQ
What do the 5 stars in cron mean?
Minute, hour, day of month, month, day of week, in that order. Five stars (* * * * *) means run every minute.
What does */5 * * * * mean?
Every 5 minutes. The */n syntax means "every n units" of that field.
Why did my cron run on the wrong day?
Probably the day-of-month / day-of-week OR behavior, or a timezone mismatch (cron uses the server timezone). See the gotcha section above.
How do I build one without memorizing the syntax?
Use the cron generator, which describes the schedule in plain English and offers presets.
Build or decode a schedule now with the free cron expression generator, or browse the rest of our developer tools.