Skip to content

Every weekday cron: what 0 9 * * 1-5 means and how to skip weekends

Runs in your browser — nothing you paste leaves this page. How we prove that

Cron Expression Tester playground

Example

Five fields — minute, hour, day of month, month, day of week. Macros like @daily are supported too.

Results update as you type — press Enter to run now.

Timezone
fig. 04 — cron-expression-tester · scheduling Valid
Result

At 09:00, on Monday through Friday.

Minute0
Hour9
Day of month*
Month*
Day of week1-5
Next runs
  • Computed in your browser, in your timezone.

`0 9 * * 1-5` fires at 09:00 on Monday, Tuesday, Wednesday, Thursday and Friday, and never at the weekend. The engine reads it as: At 09:00, on Monday through Friday.

Field by field

Minute 0, hour 9 and a day-of-week range 1-5. Cron numbers weekdays from Sunday: 0 is Sunday, 1 is Monday through 6 Saturday, and most implementations also accept 7 for Sunday. Names work too, so 0 9 * * MON-FRI is the same schedule and easier to read in review.

The parser on this page reads it as: At 09:00, on Monday through Friday. The next run times in the panel above are computed in your browser, in your own timezone, so they are not printed in this text.

The day-of-month trap

Leave the day-of-month field as * here. When both day of month and day of week are restricted, Vixie-derived crons run the job if either matches, not when both do. So 0 9 1-7 * 1 does not mean the first Monday of the month; it means every day from the 1st to the 7th and every Monday. The first-Monday idiom needs a guard in the command, such as [ "$(date +\%d)" -le 7 ] && before it.

Example, holidays and timezones

0 9 * * 1-5 /opt/reports/bin/daily-kpis --email team@example.com is a typical business-hours job. Cron knows nothing about public holidays; if the job should skip them, have the script check a holiday list and exit early.

Weekday schedules are where the server timezone bites hardest, because the hour and the day both depend on it. 09:00 UTC on Monday is already 14:30 in India and still 05:00 or 04:00 in New York. If the job is meant for a local morning, set CRON_TZ, the Kubernetes timeZone field or the zone suffix on a systemd timer rather than doing the conversion in your head; a conversion that crosses midnight also shifts the weekday range.

systemd, Kubernetes and GitHub Actions

systemd: OnCalendar=Mon..Fri *-*-* 09:00:00. Kubernetes: schedule: "0 9 * * 1-5", with concurrencyPolicy: Forbid if a run might overlap. GitHub Actions runs 0 9 * * 1-5 at 09:00 UTC, Monday to Friday UTC. For a single day see every Monday; for weekends only, use 0 9 * * 0,6.

FAQ

Questions, answered.

Tap a question to expand the answer.

Yes for standard 5-field cron, where 0 is Sunday. Quartz-style schedulers used by some Java tools number days 1 to 7 starting at Sunday, so check which syntax your scheduler expects.

Use a range in the hour field: 0 9-17 * * 1-5 runs on the hour from 09:00 to 17:00, Monday to Friday.

More free, private DevOps tools.

The Cron Expression Tester is one tool in OpsCanopy — a growing canopy of browser-based validators, converters and testers that never touch a server.

New to Linux?  Read the Linux guide →

42 free tools, every one offline-capable — opscanopy.com works with no signup and nothing uploaded.

Scheduling on Linux? Pair this with the Cron to systemd Converter, or browse the full tools directory.

Not affiliated with or endorsed by any cron implementation. Format names are used only to describe what this tool reads. OpsCanopy is free and open.