How to read a cron expression
A standard cron expression has five fields separated by spaces: minute (0-59), hour (0-23), day of month (1-31), month (1-12 or JAN-DEC) and day of week (0-7 or SUN-SAT, where both 0 and 7 mean Sunday). A job runs whenever the current minute matches all of them, subject to the day rule below.
Each field accepts * for every value, lists such as 1,15, ranges such as 1-5, and steps such as */15 or 9-17/2. The macros @yearly (or @annually), @monthly, @weekly, @daily (or @midnight) and @hourly are shorthands for common schedules.
This explainer follows the Vixie cron rules used by Linux crontab. It checks every field against its allowed range, explains the schedule in plain English, breaks it into its five fields and calculates the next five run times in your browser's time zone. If a schedule can never fire, it says so.
Field order is the most common mix-up: minute comes first, not hour. 9 0 * * * runs at 00:09, not at 9:00. Reading the plain-English line before you deploy catches this straight away.