Time, Date & Scheduling intermediate 12 min

Decode a Cron Schedule Before It Runs

Explain a cron expression in plain language before deploying a scheduled job.

Scenario

A ticket asks for a maintenance job on the schedule 15 2 * * 1-5, and the reviewer's gut reading is "every 15 minutes, right?" Cron's five-field syntax (minute, hour, day-of-month, month, weekday) punishes gut readings: fields are positional, * means every, and ranges like 1-5 depend on whether the scheduler counts Sunday as 0 or 7. A misread cron expression does not fail loudly — it just runs at the wrong time, in production, repeatedly.

Broken input

15 2 * * 1-5

Goal

Use Cron Expression Parser to translate the expression into plain language and upcoming run times, so the schedule that ships is the schedule the ticket meant.

Tool sequence

  1. Open Cron Expression Parser.
  2. Paste 15 2 * * 1-5 and read the field breakdown: minute 15, hour 2, any day-of-month, any month, weekdays 1-5.
  3. Read the plain-language result — "At 02:15, Monday through Friday" — and compare it against what the ticket actually requested.
  4. Check the preview of upcoming run times; concrete datetimes expose the misread that field labels alone can hide.
  5. Confirm the scheduler's timezone separately — cron itself has no timezone field, and "02:15" in UTC is a different maintenance window than 02:15 local; convert a sample run time with Timestamp Converter if the ticket used epoch times.

Checkpoint output

15 2 * * 1-5
→ At 02:15, Monday through Friday
next runs: Mon 02:15, Tue 02:15, Wed 02:15 ...

The job fires once per weekday at 02:15 — not every 15 minutes. The first field is minutes, and 15 there means quarter past the hour, not an interval.

Common mistakes

  • Reading the first field as hours (or as "every 15 minutes") — minute comes first in the five-field format.
  • Forgetting weekday numbering varies: Sunday is 0 in some crons, 7 in others, and 1-5 assumes Monday-start.
  • Deploying a schedule without pinning the timezone the scheduler evaluates it in.
  • Confusing */15 (every 15 minutes) with 15 (at minute 15) — one character, 96 runs a day of difference.

Related tools and lessons