Skip to content

Cron Every Weekday (Monday to Friday)

Weekdays are 1-5 in the day-of-week field, Monday to Friday. This one runs at 9:00 AM; change the hour to suit.

minute · hour · day · month · weekday

Build it with controlsWeekly at 09:00 · Mon–Fri
On

In plain English

At 9:00 AM, Monday to Friday.

Tap a field to see what it means.

A week5 runs
Mon1Tue1Wed1Thu1Fri1Sat–Sun–
Next run
—
Usually every
—
Time zone
Yours
Convert to another schedulerQuartz, Spring, AWS, GitHub Actions, Kubernetes
The same schedule in every dialect
Standard cron0 9 * * 1-5current
Quartz0 0 9 ? * MON-FRI
Spring0 0 9 * * MON-FRI
AWS EventBridgecron(0 9 ? * MON-FRI *)
GitHub Actions0 9 * * 1-5
Kubernetes0 9 * * 1-5
About Standard cronTime zone, day numbering, daylight saving
  • Runs in the machine’s local time zone; cronie also reads CRON_TZ at the top of the crontab.
  • Five fields, then the command. Day of week is 0–7 (0 and 7 are Sunday) or SUN–SAT; months 1–12 or JAN–DEC.
  • When both day fields are set, a day that matches either one runs.
  • Daylight saving: a job at a fixed time in a skipped hour runs right after the change, and one in a repeated hour runs once. Jobs with * in the minute or hour follow the clock.

Sources: crontab(5), cronie, cron(8), cronie, POSIX crontab.

How this works: Method, 10 sources, Checked against 1 worked example,

How this works

Method

The expression is read field by field with the rules of the scheduler you pick (ranges, lists, steps, names, @ macros, and L, W and # where it has them) into the values each field allows. The next runs come from stepping forward through the calendar in the chosen time zone, day by day and then time by time, using that scheduler’s rule for when both day fields are set and its documented rule for daylight saving (where it has none, a skipped time is skipped and a repeated one runs once). A conversion to another scheduler is parsed back and checked against the original before it is shown.

How it’s tested

One worked example for this page is checked by automated tests before every release: given the inputs, the tool must show the expected answer.

Changes

  • First version: plain English and the next runs for six schedulers, a builder, conversion between them, and 20 pages for common schedules.

How we make toolsReport a mistake

Worked example: 0 9 * * 1-5

Say the clock reads Thursday 7 January 2027, 10:00 AM UTC. 0 9 * * 1-5 means “at 9:00 AM, Monday to Friday”, so the next five runs are Friday 8 January 2027, 9:00 AM, Monday 11 January 2027, 9:00 AM, Tuesday 12 January 2027, 9:00 AM, Wednesday 13 January 2027, 9:00 AM and Thursday 14 January 2027, 9:00 AM.

In UTC, where no clock change interrupts it, that comes to 5 runs a week and 261 in 2027.

Monday to Friday

The fifth field is the day of the week, counted from Sunday as 0: Monday is 1 and Friday is 5, so 1-5 is the working week. 0 9 * * 1-5 runs at 9:00 AM on those five days and skips Saturday and Sunday.

Names work too, and are clearer: MON-FRI means the same in Linux cron, Kubernetes, GitHub Actions, Spring, Quartz and AWS. Numbers are where dialects disagree, because Quartz and AWS count Sunday as 1, which makes Monday to Friday 2-6.

Leave the day-of-month field as *. If you put a number there as well, Linux cron runs on days that match either field, not both, so 0 9 1 * 1-5 also runs on every weekday.

Pitfalls

  • In Quartz and AWS, 1-5 means Sunday to Thursday. Use MON-FRI to be safe.
  • Weekdays aren’t working days: public holidays still run. Check a holiday list in the script if it matters.
  • The weekday is judged in the scheduler’s time zone. 0 1 * * 1-5 on a UTC server is Sunday evening in America.
  • Day of week is 0–7, where 0 or 7 is Sunday, or names; names are the first three letters, case does not matter, and ranges of names are allowed. Source: crontab(5), cronie.
  • Quartz counts day of week 1–7 or SUN–SAT, and Spring’s documentation notes that Quartz deviates from cron’s 0–6 for SUN–SAT. Source: Spring CronExpression.

“Every Weekday” in every scheduler

The same schedule written for each scheduler, converted and checked by this tool. A dash means that scheduler can’t express it in one expression; the note says why.

The same schedule written for each scheduler, converted and checked by this tool. A dash means that scheduler can’t express it in one expression; the note says why.
SchedulerExpressionNote
Standard Unix cron (Vixie cron, cronie)0 9 * * 1-5
Quartz Scheduler (Java)0 0 9 ? * MON-FRI
Spring Framework @Scheduled0 0 9 * * MON-FRI
Amazon EventBridge cron()cron(0 9 ? * MON-FRI *)
GitHub Actions schedule0 9 * * 1-5
Kubernetes CronJob0 9 * * 1-5

Frequently Asked Questions

What is the cron for weekdays only?

Put 1-5 (or MON-FRI) in the day-of-week field: 0 9 * * 1-5 runs at 9 AM Monday to Friday.

Why does my Quartz weekday job run on Sunday?

Quartz numbers Sunday as 1, so 1-5 is Sunday to Thursday. Write 2-6 or, better, MON-FRI.

How do I run every 15 minutes during office hours?

*/15 9-16 * * 1-5 runs from 9:00 to 16:45, Monday to Friday.