Cron Every Weekday

To run cron every weekday, put 1-5 in the day-of-week field. Pick the days and time below, and check how your platform numbers Sunday before you copy the result.

Last updated: October 8, 2026

The short answer

To run cron every weekday, put 1-5 in the day-of-week field. 0 9 * * 1-5 runs at 9:00 AM Monday to Friday. Use 0 for every Sunday and 1 for every Monday.

0 9 * * 1-5
Minute0
Hour9
Day of month*
Month*
Day of week1-5

Runs at 9:00 AM every weekday (Mon-Fri).

Pick the days and the time

Toggle the days, set the time, then choose the platform. The picker writes the weekday numbers that platform expects.

Cron every weekday: 1-5

Monday to Friday is the range 1 to 5 in the day-of-week field of Linux-style cron. Day-of-month and month stay *. On platforms that accept names you can write MON-FRI, which is easier to review and avoids the numbering differences below.

The same schedule on EventBridge is cron(0 9 ? * MON-FRI *) and on Quartz it is 0 0 9 ? * MON-FRI. Both use names here because their numbers start at 1 for Sunday.

Cron every Sunday, every Monday and other days

For a single day, put its number in the field. Lists use commas and ranges use hyphens, and you can combine them.

ExpressionWhat it doesUse
0 0 * * 0Runs at 12:00 AM every Sunday.
Every Sunday at midnight. 7 also means Sunday on Linux.
Open
0 8 * * 1Runs at 8:00 AM every Monday.
Every Monday at 8:00.
Open
0 9 * * 1,3,5Runs at 9:00 AM every Monday, Wednesday and Friday.
Monday, Wednesday and Friday.
Open
0 10 * * 0,6Runs at 10:00 AM every weekend day (Sat and Sun).
Weekends.
Open
0 17 * * 5Runs at 5:00 PM every Friday.
Friday afternoons.
Open
0 9 * * 1-5Runs at 9:00 AM every weekday (Mon-Fri).
Weekdays.
Open

Day-of-week numbers by platform

This is where weekly schedules go wrong. The numbers are not the same everywhere, and a Quartz expression copied to Linux runs one day late.

PlatformSundayMondayFridaySaturdayNames
Linux, Unix0 (and 7)156SUN-SAT
Kubernetes0156SUN-SAT
GitHub Actions0156SUN-SAT
Vercel0156not accepted
AWS EventBridge1267SUN-SAT
Quartz1267SUN-SAT
Spring0 (and 7)156SUN-SAT

If the platform accepts names, use them. Vercel does not, so check its number table twice.

The day-of-month trap

People try to say "the first Monday of the month" as 0 9 1-7 * 1. On Linux it means: Runs at 9:00 AM on days 1, 2, 3, 4, 5, 6 and 7 of every month and every Monday (either one triggers a run). Restricting both day fields makes the job run when either matches, so it fires on days 1 to 7 and on every Monday.

Plain cron cannot express the first Monday. Quartz and EventBridge can: MON#1. On Linux, schedule every Monday and let the command check the date:

0 9 * * 1  [ "$(date +\%d)" -le 7 ] && /path/to/job.sh

The backslash before the percent sign is required inside a crontab. See the first day of month page.

Vercel avoids the trap by refusing the combination.

What cron cannot do: every other week

Cron has no "every second Monday". A step in the day-of-week field repeats within a week, not across weeks. To run fortnightly, schedule weekly and have the job exit unless the week number is even, or use a platform that supports intervals.

Time zones can move the weekday

If the scheduler runs in UTC, converting a late-evening local time can move the run to the next UTC day, and then the weekday number changes too. The cron timezone converter adjusts the day for you.

Sources and further reading