The expression
0 0 * * 1
│ │ │ │ └── day of week: 1 = Monday
│ │ │ └──── month: any
│ │ └────── day of month: any
│ └──────── hour: 0 (midnight)
└────────── minute: 0
0 0 * * 1 runs once, at midnight, every Monday. The day-of-week field is what does the actual work here — everything else stays wildcarded.
Day-of-week numbering
| Value | Day |
|---|---|
| 0 or 7 | Sunday |
| 1 | Monday |
| 2 | Tuesday |
| 3 | Wednesday |
| 4 | Thursday |
| 5 | Friday |
| 6 | Saturday |
Both 0 and 7 map to Sunday in most implementations, which is why Monday is reliably 1 across virtually every cron variant — a safe number to depend on.
Common variants
| Need | Expression |
|---|---|
| Every Monday at midnight | 0 0 * * 1 |
| Every Monday at 9 AM | 0 9 * * 1 |
| Every Monday and Thursday at 9 AM | 0 9 * * 1,4 |
| Every weekday (Mon–Fri) at 9 AM | 0 9 * * 1-5 |
Why "every other Monday" isn't expressible directly
Standard cron has no built-in concept of alternating weeks — every field describes a fixed, repeating pattern, not a count of how many times it's matched before. To actually run something every other Monday, you need either a scheduler with iteration/counter extensions, or application logic that checks the ISO week number (odd/even) and exits early on the "off" week — the cron trigger itself still fires weekly, but the job decides whether to actually do anything.
Common mistakes
- Confusing day-of-week numbering across systems. Nearly all cron implementations agree Monday is
1, but always double check if migrating from an unfamiliar scheduler. - Expecting native support for biweekly/every-other-week schedules. This needs a workaround (date-based logic inside the job), not a cron field alone.
- Forgetting the timezone the schedule runs in. "Monday at 9 AM" is relative to the executing system's clock, not necessarily the time zone the schedule was written with in mind.
FAQ
What number represents Monday in cron?1 — consistent across virtually every cron implementation, including the ones where Sunday can be either 0 or 7.
Can cron run something every other Monday natively?
No — standard cron has no concept of alternating occurrences; you need the job itself to check the week number and skip alternate runs.
How do I run something every Monday and Friday?
List both values in the day-of-week field: 0 9 * * 1,5.
Confirm the schedule and see the next few run dates with the Cron Expression Descriptor.