Curated cron expression
Every Monday at 9 AM Cron Expression: 0 9 * * 1
Understand 0 9 * * 1 for Monday at 9 AM, with field-by-field explanation, weekly next runs, timezone and DST notes, use cases, and scheduler conversions.
Meaning at a glance
0 9 * * 1
Run every Monday at 09:00
Once per week at Monday 09:00 in the scheduler timezone.
Next-run example: After Monday at 09:01, the next nominal run is the following Monday at 09:00.
How 0 9 * * 1 works
The final value 1 selects Monday in the Unix day-of-week field. Combined with minute 0 and hour 9, the expression fires once each week on Monday morning.
Weekly workflows need an explicit recovery path. If Monday’s run fails, waiting for the next cron event means a seven-day delay unless a retry or manual backfill exists.
| Field | Value | Meaning |
|---|---|---|
| Minute | 0 | At minute zero |
| Hour | 9 | At 09:00 |
| Day of month | * | Any date that is Monday |
| Month | * | Every month |
| Day of week | 1 | Monday |
Good use cases
- Weekly planning digest
- Capacity report
- Monday data refresh
- Weekly dependency review
Timezone and daylight-saving behavior
A team-facing Monday schedule should normally use the team’s named timezone, not the server default.
09:00 is usually outside a DST transition window, but its corresponding UTC hour changes when the selected region changes offset.
The expression does not contain a timezone. The scheduler supplies that context. Use the next-run preview above in the same IANA timezone as production, then confirm the target platform's own timezone rules.
Platform compatibility and converted expressions
The source expression is five-field Unix cron. Use the exact equivalent below rather than adding or removing fields by sight.
| Platform | Status | Expression | What to know |
|---|---|---|---|
| Unix crontab | Ready | 0 9 * * 1 | Use directly in a normal five-field user crontab. |
| Kubernetes CronJob | Ready | 0 9 * * 1 | Use as spec.schedule; set spec.timeZone when local wall-clock behavior matters. |
| GitHub Actions | Ready | 0 9 * * 1 | Use under on.schedule; UTC is the default and an IANA timezone may be specified. |
| Vercel Cron Jobs | Plan / behavior limit | 0 9 * * 1 | Valid weekly expression at 09:00 UTC; verify current plan scheduling limits. |
| AWS EventBridge Scheduler | Convert | cron(0 9 ? * MON *) | Convert to AWS minute-first cron(...), add the required year, and use ? in one day field. |
| Spring @Scheduled | Convert | 0 0 9 * * MON | Use Spring’s six fields by prepending seconds and set zone explicitly when needed. |
| systemd timer | Convert | Mon *-*-* 09:00:00 | Use OnCalendar syntax and validate it with systemd-analyze calendar on the target host. |
Edge cases to check before deployment
- Unix uses Monday=1, while other schedulers may number weekdays differently.
- Public holidays do not suppress the run.
- Add a backfill command because the next automatic opportunity is one week later.
Frequently asked questions
What does the cron expression 0 9 * * 1 mean?
0 9 * * 1 means “run every monday at 09:00.” Once per week at Monday 09:00 in the scheduler timezone.
What are the next run times for 0 9 * * 1?
After Monday at 09:01, the next nominal run is the following Monday at 09:00. Exact timestamps depend on the scheduler timezone and the current time.
What timezone does 0 9 * * 1 use?
A team-facing Monday schedule should normally use the team’s named timezone, not the server default.
Can I use 0 9 * * 1 on every scheduling platform?
No. It is a five-field Unix expression. Some platforms accept it directly, while AWS EventBridge Scheduler, Spring, and systemd require the converted form shown in the compatibility table.