Quick answer
The cron expression for every weekend is 0 0 * * 6,0. The day-of-week list 6,0 means Saturday (6) and Sunday (0), and the first two fields run it at 00:00. That is two runs per weekend: one as Saturday begins and one as Sunday begins. The order of a list doesn't matter, so 0,6 is identical.
- Live next runs
- Any time zone
- Field-by-field breakdown
- Seven platform snippets
- Daylight saving aware
How to use this schedule
- 1Copy
0 0 * * 6,0with 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.
Why is it 6,0 and not 6-0?
Saturday is 6 and Sunday is 0, so the weekend straddles the end of cron's numbering. A range has to run upward, which makes 6-0 invalid: cron rejects the line, and the error is easy to miss if you never read cron's logs. There are three correct ways to write the weekend:
6,0: a list, read as "Saturday and Sunday"0,6: the same list in numeric order6-7: a range from Saturday to 7, which is Sunday's alternative number in Vixie cron and cronie
Lists are the most portable of the three, since not every scheduler accepts 7. In crontab you can also write SAT,SUN. The same rule applies to any span that crosses Sunday, such as Friday to Monday: write 5,6,0,1 or 5-7,1, never 5-1.
Do you want one run per weekend or two?
0 0 * * 6,0 runs twice: at the start of Saturday and at the start of Sunday. That suits jobs that should happen on each weekend day, like a heavier maintenance pass while traffic is low. If you want the job once per weekend, pick a single day instead: 0 0 * * 6 (Saturday at midnight) or 0 3 * * 0 (Sunday at 3 AM). For maintenance windows, an early-morning hour such as 03:00 is often quieter than midnight, when other nightly jobs are still running. Both weekend days are judged in the server's time zone, so on a UTC server "the weekend" starts on Friday evening in the Americas.
What does each field in 0 0 * * 6,0 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 | 6,0 | 0–7 (0 and 7 are Sunday), SUN–SAT | only on Sunday and Saturday |
Read together: At 00:00 on Saturday and again at 00:00 on Sunday.
How do I adjust 0 0 * * 6,0 to my own schedule?
Small edits to 0 0 * * 6,0 cover most real-world needs:
| Expression | What it does |
|---|---|
0 0 * * 6 | Once a weekend, Saturday at midnight |
0 3 * * 0 | Once a weekend, Sunday at 3 AM |
0 */4 * * 6,0 | Every 4 hours throughout Saturday and Sunday |
0 0 * * 6-7 | Saturday and Sunday, using 7 for Sunday |
0 0 * * 1-5 | The opposite: weekdays only |
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 weekday · Every Sunday · Every week · Every Friday at 5pm
Browse all schedules in the cron schedule library.
How do I run 0 0 * * 6,0 in crontab, GitHub Actions, Kubernetes and the cloud?
| Platform | Write it as | Time zone |
|---|---|---|
| Linux crontab | 0 0 * * 6,0 | Server's time zone; CRON_TZ= in cronie |
| GitHub Actions | - cron: "0 0 * * 6,0" | UTC by default; add timezone: (IANA name) |
| Kubernetes CronJob | schedule: "0 0 * * 6,0" | Set timeZone: (1.27+) |
| Cloudflare Workers | 0 0 * * SUN,SAT | UTC only; numbers weekdays from 1 = Sunday, so use names |
| Vercel Cron Jobs | 0 0 * * 6,0 | UTC only; Hobby runs it within the hour (±59 min) |
| AWS EventBridge Scheduler | cron(0 0 ? * SUN,SAT *) | Takes a time zone; legacy scheduled rules are UTC only |
| systemd timer | OnCalendar=Sun,Sat *-*-* 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 * * 6,0 /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 * * 6,0?
6-0is a backwards range and is invalid. Use6,0,0,6or6-7.- The schedule fires twice each weekend. If the job should run once, choose a single day such as
0 0 * * 6. - Weekend days are judged on the server's clock. On a UTC server, Saturday 00:00 is still Friday evening in North America.
- Quartz, AWS EventBridge and Cloudflare Workers number Sunday as 1 and Saturday as 7, so their weekend is
1,7orSAT,SUN. Day names avoid the confusion. - 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.