Cron Expression for the First Monday of the Month

First monday of the month, 12 times a year
0 9 1-7 * *

Cron reads this as: at 09:00, on day-of-month 1 through 7.

Next 5 runs

These are candidate days, not runs

Cron alone cannot express this schedule, so the expression deliberately matches several days and a shell test picks the right one. The times below are the days cron will wake up; the guard shown further down lets exactly one of them through.

These times are in your browser's local time zone. Cron itself uses the server's zone, which on most cloud hosts is UTC. If the difference matters here, see time zones & DST.

When to use this schedule

Use it for monthly meetings, monthly reports and anything else tied to a weekday rather than a date. Like the last day of the month, this schedule needs a shell guard in standard cron.

What to watch out for

The obvious expression, 0 9 1-7 * 1, does not work. When both day-of-month and day-of-week are restricted, standard cron runs when either matches, so that expression fires on days 1 through 7 and on every Monday, roughly eleven times a month. The approach that works restricts only the day of month to the first week and tests for Monday in the shell. In Quartz you can write this directly as 0 0 9 ? * MON#1.

The crontab line

This schedule needs a shell guard, because cron alone cannot express it. The expression narrows cron to the candidate days and the test lets exactly one of them through:

0 9 1-7 * * [ "$(date +\%u)" = "1" ] && /usr/local/bin/your-job.sh

Crontab requires the \% escaping. An unescaped % is turned into a newline, and everything after it is fed to the command on standard input. See the crontab guide for the full rule.

Related schedules

Variations on first monday of the month
ExpressionSchedule
0 9 1-7 * 1The broken version: 11 runs/month
0 0 9 ? * MON#1The Quartz equivalent
0 9 * * 1Every Monday instead

Build your own

If this page doesn't cover the schedule you need, compose it field by field in the visual builder, or paste an expression you already have into the explainer for a per-field breakdown. The examples library has sixty schedules in one place, and the guides cover crontab syntax, time zones, troubleshooting and production practices.