Cron Expression for On 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.

Computed in your browser's local time zone. Cron itself evaluates against the server's zone, which on most cloud hosts is UTC — see time zones & DST if that distinction matters here.

When to use this schedule

Monthly meetings, monthly reports, anything anchored to a weekday rather than a date. Like the last day of the month, this needs a 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 fires on days 1 through 7 and on every Monday: roughly eleven times a month. The working approach restricts only the day of month to the first week and tests for Monday in the shell. In Quartz this is expressible 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

The \% escaping is a crontab requirement — 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

Need something this page does not cover? 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 collects sixty schedules in one place, and the guides cover crontab syntax, time zones, troubleshooting and production practices.