0 9 1-7 * *
Cron reads this as: at 09:00, on day-of-month 1 through 7.
Next 5 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.
- Calculating…
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
| Expression | Schedule |
|---|---|
0 9 1-7 * 1 | The broken version: 11 runs/month |
0 0 9 ? * MON#1 | The Quartz equivalent |
0 9 * * 1 | Every 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.