Cron every Monday
0 9 * * 1At 09:00, only on Monday.
Next runs · UTC
- —
- —
- —
- —
- —
Calendar
September 2026 · UTC
0 runs
About this tool
0 9 * * 1 - at 09:00 every Monday. Use this for “new week” tasks: weekly digest emails, sprint reset, status reports, capacity reviews.The cron expression for every Monday at 09:00
0 9 * * 1
The day-of-week value 1 is Monday in standard Unix cron (Quartz uses 1=Sunday - see the dialect note in the every-week pillar). Equivalent name-alias form: 0 9 * * MON.
See the dedicated guide for the full breakdown: Cron every week.
Paste it into the editor above to see the next runs on a calendar.
When to run a job every Monday at 09:00
- Reports and notifications that should only go out every Monday at 09:00.
- Maintenance windows and heavier batch jobs scheduled around when people are working.
- Reminders and check-ins tied to a weekly rhythm rather than a calendar date.
Run this cron anywhere
0 9 * * 1 is five-field cron syntax. It works as is in:
- Linux
crontab-0 9 * * 1 /path/to/script.sh - Vercel cron jobs - declare in
vercel.json. - node-cron, robfig/cron and Kubernetes CronJob.
AWS EventBridge and Quartz use six-field expressions with a ? in one of the day fields, so convert first:
- AWS EventBridge -
cron(minute hour day-of-month month ? year); see the AWS guide. - Quartz Scheduler - prepend a seconds field (
0) and replace one day field with?; see the Quartz guide.
Useful variations
0 0 * * 1- every Monday at midnight0 9 * * MON- name-alias form (equivalent)*/30 9-17 * * 1- every 30 minutes during business hours, Mondays only
Gotchas when running every Monday at 09:00
- Timezone and daylight saving - DST handling is scheduler-specific: Vixie/cronie can skip or double local matches; GitHub advances nonexistent local times; EventBridge Scheduler skips spring and runs once in the fall overlap. UTC-only Vercel and Cloudflare schedules are unaffected.
- Missed runs are not replayed - If the host or platform is unavailable at the scheduled minute, standard cron simply waits for the next match. Add a heartbeat or alert if a skipped run must be noticed.
- Day-of-week and day-of-month are OR-ed - In Vixie-style cron, restricting both fields runs the job when either matches. Keep day-of-month as
*when the weekday is the only restriction you want. - Sunday numbering varies by dialect - Vixie-style cron accepts 0 and 7 as Sunday. AWS EventBridge and Quartz use 1 for Sunday and 7 for Saturday; prefer weekday names when translating dialects.
Examples
- 0 18 * * *Every day at 18:00
- 0 */5 * * *Every 5 hours
- 0 18 * * 1-5Weekdays at 18:00
- 0 0 1 * *Once a month, on the 1st at midnight
Cheatsheet
Full cheatsheet| Field | Req. | Range | Wildcards |
|---|---|---|---|
| minute | yes | 0-59 | , - * / |
| hour | yes | 0-23 | , - * / |
| day of month | yes | 1-31 | , - * / |
| month | yes | 1-12 or JAN-DEC | , - * / |
| day of week | yes | 0-6 or names; some dialects use 0-7 or 1-7 — see Dialects | , - * / |
Frequently asked questions
Syntax
Can I write MON instead of 1 for Monday?
Yes. 0 9 * * MON is the readable equivalent of 0 9 * * 1 in schedulers that accept weekday names. Expression: 0 9 * * MON
Timing
When should a Monday backlog job run?
Run it after upstream weekend work is complete. 0 9 * * 1 starts at 09:00 Monday; move the hour later if weekend imports or backups can still be finishing. Expression: 0 9 * * 1
Days and months
Does 0 9 1 * 1 mean the first Monday of each month?
No in Vixie cron. It fires at 09:00 on every Monday and on every first day of the month because restricted day-of-month and day-of-week fields are OR-ed; Quartz and AWS forbid this combination and require ? in one day field. Expression: 0 9 1 * 1
How do I schedule the second Monday of each month?
Use 0 0 9 ? * MON#2 in Quartz. #2 selects the second occurrence of Monday; AWS uses the minute-first equivalent inside cron(...). Expression: 0 0 9 ? * MON#2
How do I schedule the last Monday of each month?
Use 0 0 9 ? * MONL in Quartz-compatible syntax. Standard Vixie crontab does not support L on weekdays, so use a wrapper or a scheduler that documents this operator. Expression: 0 0 9 ? * MONL
Does @weekly run on Monday?
No in Vixie crontab. @weekly means Sunday at 00:00, so use 0 0 * * 1 when the weekly boundary must be Monday. Expression: 0 0 * * 1
Will Monday public holidays reduce the number of runs?
No. Cron still runs on Monday holidays, which are common in US and UK calendars; use a country-specific holiday check when the job should move or skip.
Day-field rulesHow do I add Thursday to the Monday schedule?
Use 0 9 * * 1,4. A comma-separated day-of-week list runs at 09:00 on Monday and Thursday. Expression: 0 9 * * 1,4
Platforms
Does 0 9 * * 1 mean Monday in Quartz too?
No. The final 1 means Monday in Vixie numbering but Sunday in Quartz numbering, and the five-field expression is invalid in Quartz. For Monday in Quartz, use 0 0 9 ? * MON. Expression: 0 0 9 ? * MON
Debugging
Why might a Monday morning report contain incomplete data?
Weekend pipelines may still be finishing when the Monday report starts. Make the report depend on completion markers or schedule it after the slowest upstream job.
Crontap
Can Crontap call an endpoint every Monday?
Yes. Crontap can run 0 9 * * 1 in the selected IANA timezone and invoke an HTTP endpoint on each match.
General
What is the cron expression for every Monday at 09:00?
0 9 * * 1. Paste this into Linux crontab, Vercel cron, node-cron, robfig/cron, or a Kubernetes CronJob to run a job every Monday at 09:00; AWS EventBridge and Quartz need the six-field form.
How can I verify this cron actually runs every Monday at 09:00?
The editor above shows the next 30+ runs on a calendar in your local timezone, plus a plain-English description. If the calendar matches your intent, the cron is correct.
Does 0 9 * * 1 work on every platform?
Linux crontab, Vercel cron jobs, node-cron, robfig/cron, and Kubernetes CronJob accept the five-field form as is. AWS EventBridge and Quartz use six-field expressions with a ? in one of the day fields; see the AWS and Quartz guides for the conversion. Vercel's free Hobby plan caps the minimum frequency at once-per-day; the Pro plan removes that cap.
What happens if the previous run is still going when the next one fires?
Most schedulers will start the new run anyway, leading to overlap. To prevent this, wrap the command with flock -n /tmp/myjob.lock /path/to/script.sh on Linux, or set concurrencyPolicy: Forbid on Kubernetes CronJob. Vercel and EventBridge may overlap runs if the previous one is still executing; make the handler idempotent.
Write the cron here. Run it on Crontap.
Point Crontap at any URL. Pick any cron. Done.
WordPress, Shopify, Railway, Cloud Run, Vercel, HubSpot, Ghost, your own box. If it answers HTTP, Crontap can drive it on a clock you can read, in the timezone that actually matters, and page you when something breaks.
1.9k+ teams · Free forever tier · No credit card