Cron Expression Explainer: What the Stars and Numbers Mean and When Your Schedule Will Really Run

person فريق سهلcalendar_today October 14, 2026schedule 5 min read
The five fields of a cron expression above a calendar and a clock

You find a cryptic line in a config file like */15 9-17 * * 1-5 and have no idea what it does. Or you write a schedule yourself and wonder: will it run every hour or every minute? Cron is the job scheduler on Unix and Linux systems, and its expressions are short but dense, and a mistake in one field makes a big difference. Sahel's cron explainer reads the expression and explains it in a clear sentence, and shows the next run times so you can confirm before relying on it.

The five fields

A standard cron expression has five fields separated by spaces, in this order:

  1. Minute: 0 to 59.
  2. Hour: 0 to 23.
  3. Day of month: 1 to 31.
  4. Month: 1 to 12, or names such as JAN and FEB.
  5. Day of week: 0 to 6 where 0 is Sunday, or names such as MON and TUE. 7 is also accepted for Sunday.

So 30 8 * * * means 8:30 every morning, since the minute is 30, the hour is 8 and the other fields are stars.

The four symbols

  • Star *: "every possible value". A star in the hour field means every hour.
  • Comma ,: a list. 0,30 in minutes means at minute 0 and at 30.
  • Dash -: a range. 9-17 in hours means from nine in the morning to five in the afternoon.
  • Slash /: a step. */15 in minutes means every fifteen minutes: 0, 15, 30 and 45.

They can be combined: the */15 9-17 * * 1-5 we began with means every fifteen minutes, from nine until about a quarter to six, Monday to Friday. That is a fitting schedule for a job that should run in office hours only.

Ready-made shortcuts

The tool accepts common shortcuts in place of the five fields: @hourly every hour, @daily every day at midnight, @weekly every Sunday, @monthly the first of each month, and @yearly the first of January. They are translated internally to the full expression.

The rule that surprises everyone: the double day

If you set both day of month and day of week, how do they combine? Most people assume cron requires both to match, so it would run "Friday the 13th only". In fact classic cron runs when either matches. So 0 0 13 * 5 runs on the thirteenth of every month, and also on every Friday, not only on Friday the 13th. The rule is documented and intentional, and it is among the most common reasons a job runs on days you do not expect. The tool applies the rule exactly and you can see it in the upcoming run times.

Do not say "I think it will run on Monday". Put the expression in the tool and look at the actual run times.

Time zone: why UTC

The next run times in the tool are calculated in UTC, because most servers run in it. This matters: a job scheduled at "0 9" runs at nine o'clock server time, which is probably not your time. If you are in Riyadh at UTC+3, your job will run at noon your time. The tool shows your local time beside UTC so you can compare. And do not assume your server is on the time zone you want; check its settings.

What the tool deliberately does not support

Some schedulers, such as Quartz, add a seconds field and symbols like L, W and #. These are not standard cron and their meanings differ between systems, so the tool does not guess; it rejects them and says so. It also does not support the @reboot shortcut, since it is not tied to a time.

Common mistakes

  • A star in the minute field: * 9 * * * runs every minute during the ninth hour, sixty times, not once. To run once, write 0 9 * * *.
  • Confusing Sunday 0 with Monday 1: the week starts with Sunday in cron.
  • Dates that do not exist: 0 0 31 2 *, the 31st of February, never runs. The tool detects these and tells you.
  • Forgetting daylight saving: on a server that follows it, a job may run twice or be skipped on the night the clocks change.

How to use it

  1. Type or paste a cron expression in the box.
  2. Read the explanation in words; if you made a mistake the tool says which field is wrong.
  3. Check the upcoming run times and compare them with what you intend.
  4. Copy the expression or the explanation for your documentation.

A realistic scenario

A developer wants a database backup every day at three in the morning his time in Riyadh. He types 0 3 * * * and sees that the next run is three o'clock UTC, which is six in the morning for him, not three. He works out that three in the morning for him is midnight UTC, and writes 0 0 * * * or @daily. Without the tool's check the backup would have run at the site's busiest hour.

Frequently asked questions

What do the five fields mean?

In order: minute, hour, day of month, month, day of week.

What does */5 mean?

Every five units, so in the minute field it means every five minutes.

What if I set both day of month and day of week?

In standard cron the job runs when either matches, not both.

What time zone are the times shown in?

UTC, with your local time shown beside it. Check your server's actual time zone.

Does the tool support Quartz syntax?

No. It supports standard five-field cron, and tells you when you type something it does not understand rather than guessing.

Related articles