Quick answer
The cron expression for every Monday is 0 0 * * 1. The 1 in the day-of-week field is Monday, and 0 0 sets the time to 00:00, so the job runs once a week as Monday begins. Change the first two fields to pick another time, such as 0 9 * * 1 for 9 AM on Mondays, and leave the day-of-month and month fields as asterisks.
- Live next runs
- Any time zone
- Field-by-field breakdown
- Seven platform snippets
- Daylight saving aware
How to use this schedule
- 1Copy
0 0 * * 1with the Copy expression button. - 2Check Next runs in your time zone to confirm it fires when you expect, including around daylight saving changes.
- 3Pick your platform under Use it on your platform and copy the ready-made crontab line, workflow, manifest or timer.
- 4Need a different time or day? Click Customize to open it in the cron expression generator and change any field.
What is a Monday cron job good for?
Monday is the natural start of the working week, so a Monday schedule is where weekly housekeeping lives: resetting weekly quotas, generating last week's analytics, rotating an on-call roster or archiving the previous week's logs. Running at 0 0 means the previous week (Monday through Sunday) is complete when the job starts, as long as the job works out "last week" from the run date rather than from the current time minus seven days.
If the output is for people rather than for other systems, an hour like 0 8 * * 1 delivers a fresh report at the start of the day instead of at midnight, when nobody reads it and the job competes with every other nightly task.
How is Monday written in cron and in other schedulers?
In crontab, Monday is 1 or MON in any letter case. Day numbering is where tools disagree, so check before you copy an expression across:
| Scheduler | Monday | Sunday |
|---|---|---|
| crontab (Vixie cron, cronie) | 1 | 0 or 7 |
| Kubernetes, GitHub Actions | 1 | 0 |
| AWS EventBridge, Quartz | 2 | 1 |
| Cloudflare Workers | 2 | 1 |
systemd OnCalendar | Mon | Sun |
Where names are supported, MON means Monday everywhere, which makes names the safest way to share a weekly schedule between tools that number days differently.
What does each field in 0 0 * * 1 mean?
| Field | Value | Allowed | Meaning |
|---|---|---|---|
| Minute | 0 | 0–59 | at minute 0 (on the hour) |
| Hour | 0 | 0–23 | at hour 0 (midnight) |
| Day of month | * | 1–31 | every day of the month |
| Month | * | 1–12, JAN–DEC | every month |
| Day of week | 1 | 0–7 (0 and 7 are Sunday), SUN–SAT | only on Monday |
Read together: At 00:00 every Monday, once a week.
How do I adjust 0 0 * * 1 to my own schedule?
Small edits to 0 0 * * 1 cover most real-world needs:
| Expression | What it does |
|---|---|
0 9 * * 1 | Mondays at 9 AM |
30 6 * * 1 | Mondays at 06:30, before the working day starts |
0 0 * * MON | The same schedule written with the day name |
0 0 * * 1,4 | Mondays and Thursdays at midnight |
0 0 * * 2-5 | Tuesday through Friday, the rest of the working week |
Need something else? Click Customize at the top of the page to open this schedule in the cron expression generator and change any field.
Related schedules: Every week · Every Sunday · Every weekday · First Monday of the month
Browse all schedules in the cron schedule library.
How do I run 0 0 * * 1 in crontab, GitHub Actions, Kubernetes and the cloud?
| Platform | Write it as | Time zone |
|---|---|---|
| Linux crontab | 0 0 * * 1 | Server's time zone; CRON_TZ= in cronie |
| GitHub Actions | - cron: "0 0 * * 1" | UTC by default; add timezone: (IANA name) |
| Kubernetes CronJob | schedule: "0 0 * * 1" | Set timeZone: (1.27+) |
| Cloudflare Workers | 0 0 * * MON | UTC only; numbers weekdays from 1 = Sunday, so use names |
| Vercel Cron Jobs | 0 0 * * 1 | UTC only; Hobby runs it within the hour (±59 min) |
| AWS EventBridge Scheduler | cron(0 0 ? * MON *) | Takes a time zone; legacy scheduled rules are UTC only |
| systemd timer | OnCalendar=Mon *-*-* 00:00:00 | Add a zone after the time, e.g. Europe/London |
In a crontab (crontab -e), the full line looks like this:
0 0 * * 1 /path/to/job.sh >> /var/log/job.log 2>&1The live panel at the top of the page builds complete, copy-ready files for each platform (workflow, CronJob manifest, wrangler.toml, vercel.json, AWS CLI and systemd units) and can shift the schedule to UTC for platforms that need it.
What can go wrong with 0 0 * * 1?
- A Monday 00:00 run on a UTC server happens on Sunday evening in the Americas. If the job's idea of "this week" depends on local dates, compute them in the right time zone.
- There is no first-Monday-of-the-month in standard cron.
0 0 1-7 * 1looks right but runs on days 1–7 and on every Monday, because the two day fields are combined with OR. See first Monday of the month for the fix. - AWS EventBridge and Cloudflare Workers number Monday as 2. Copying the
1from0 0 * * 1into either of them schedules Sunday. - Weekly jobs are easy to forget when they fail. Alert on failure, because the next chance to notice is seven days away.
- On UTC-only platforms (Cloudflare Workers, Vercel, legacy EventBridge rules), the local time this runs at moves by an hour when daylight saving time starts or ends. Use GitHub's
timezone:, KubernetestimeZone, EventBridge Scheduler or cronie'sCRON_TZto pin it to local time.
Frequently asked questions
Last updated by the Playxoft engineering team.