Monthly
0 9 1-7 * 1
Run on the first Monday of every month at 09:00.
This preview is live: the table below shows the actual next run times for 0 9 1-7 * 1 in your time zone, recomputed in your browser. Change the expression, dialect, or zone to experiment, then copy the result.
What 0 9 1-7 * 1 means
Plain Unix cron has no "Nth weekday" operator, so the first Monday of the month is expressed with a trick: 0 9 1-7 * 1 fires at 9am on any day in the range 1-7 that is also a Monday. Since exactly one Monday falls in the first seven days of every month, this reliably hits the first Monday.
This day-of-month-AND-day-of-week emulation is one of the most useful idioms in cron. The same shape gives you the first of any weekday: 1-7 for the first occurrence, 8-14 for the second, and so on.
Field-by-field breakdown
Unix cron has five fields. Here is what each one is doing in this expression:
| Field | Value | Meaning |
|---|---|---|
| Minute | 0 | minute = 0 |
| Hour | 9 | hour = 9 |
| Day of month | 1-7 | the range 1-7 (inclusive) of day-of-month |
| Month | * | every month |
| Day of week | 1 | day-of-week = 1 |
First Monday of the month in every scheduler
The same cadence written for the seven cron dialects you are most likely to meet. Copy the line for the system you target, the field count and day-of-week numbering differ between them.
| Scheduler | Expression | Copy |
|---|---|---|
| Unix / crontab | 0 9 1-7 * 1 | |
| GitHub Actions | 0 9 1-7 * 1 | |
| Kubernetes CronJob | 0 9 1-7 * 1 | |
| Vercel Cron | 0 9 1-7 * 1 | |
| Quartz | 0 0 9 1-7 * 1 * | |
| Spring | 0 0 9 1-7 * 1 | |
| AWS EventBridge | 0 9 1-7 * 1 * |
Dialect note: Quartz and EventBridge have a real first-Monday operator: 0 0 9 ? * MON#1 (Quartz) and 0 9 ? * MON#1 * (EventBridge). Use it instead of the 1-7 trick on those systems.
When you would use 0 9 1-7 * 1
- Monthly all-hands or board-meeting reminders.
- First-Monday release or maintenance windows.
- Recurring monthly reports tied to a weekday, not a date.
The gotcha worth knowing
This only works because most cron daemons treat day-of-month and day-of-week as AND when BOTH are restricted to non-wildcards inside a narrow range, behavior that is technically implementation-specific. Quartz/EventBridge express it cleanly with MON#1; prefer that where available.
People also search for
0 9 1-7 * 1 FAQ
What does the cron expression 0 9 1-7 * 1 mean?
0 9 1-7 * 1 means: Run on the first Monday of every month at 09:00. Plain Unix cron has no "Nth weekday" operator, so the first Monday of the month is expressed with a trick: 0 9 1-7 * 1 fires at 9am on any day in the range 1-7 that is also a Monday. Since exactly one Monday falls in the first seven days of every month, this reliably hits the first Monday.
How do I write "first monday of the month" in GitHub Actions?
Use 0 9 1-7 * 1 in the schedule's cron field. This only works because most cron daemons treat day-of-month and day-of-week as AND when BOTH are restricted to non-wildcards inside a narrow range, behavior that is technically implementation-specific. Quartz/EventBridge express it cleanly with MON#1; prefer that where available.
How do I write "first monday of the month" for AWS EventBridge?
EventBridge uses six fields with a required year and a ? placeholder in one day field: 0 9 1-7 * 1 *. Wrap it as cron(0 9 1-7 * 1 *) in the console or CloudFormation.
What is the Quartz equivalent of 0 9 1-7 * 1?
Quartz is seconds-first with a trailing year, so the equivalent is 0 0 9 1-7 * 1 *. Remember Quartz numbers Sunday as 1, the opposite of Unix.
Related cron patterns
More cron tools
Browse the full set of cron pattern pages, or jump to the interactive tools: the cron expression builder for designing a schedule from scratch, the cron cheat sheet for a side-by-side reference, the cron timezone translator for moving a schedule between zones and dialects, and the GitHub Actions cron picker for DST-stable CI schedules.