Skip to main content

Cron every week explained

0 0 * * 0

At 00:00, only on Sunday.

Next runs · UTC

Calendar

September 2026 · UTC

0 runs

About this tool

The cron expression for every week is 0 0 * * 0 - at midnight every Sunday. The day-of-week field 0 is Sunday in standard cron (Quartz uses 1=Sunday - be careful when copying expressions across dialects). To shift the day, change the last field; to shift the time, change the minute and hour.
Weekly cron is the right cadence for: weekly digests, “new week” setup tasks, weekly billing rollups, log archiving, and anything that lives on a 7-day cycle. Most production crontabs have at least one weekly entry.

Picking a weekday

The day-of-week field accepts a number, a name, a list, or a range. The mapping (standard Unix cron):

  • 0 or 7 = Sunday (SUN)
  • 1 = Monday (MON)
  • 2 = Tuesday (TUE)
  • 3 = Wednesday (WED)
  • 4 = Thursday (THU)
  • 5 = Friday (FRI)
  • 6 = Saturday (SAT)

Quartz uses different numbering: 1=Sunday, 2=Monday, …, 7=Saturday. If you're moving an expression between Unix cron and Quartz, double-check the day-of-week value.

Every week on different platforms

Linux crontab

crontab
0 0 * * 0 /path/to/weekly.sh
# Or with the @weekly alias (Sunday midnight):
@weekly /path/to/weekly.sh
# Or as Monday morning:
0 9 * * MON /path/to/monday-job.sh

Vercel cron jobs

json
{
  "crons": [
    { "path": "/api/cron/weekly", "schedule": "0 9 * * 1" }
  ]
}

AWS EventBridge

crontab
cron(0 9 ? * MON *)
# AWS uses 6 fields: minute hour dom month dow year. ? required in dom or dow.

Quartz (Java)

java
// Note: Quartz day-of-week is 1-7, 1=Sunday. Monday is 2.
Trigger trigger = newTrigger()
    .withSchedule(cronSchedule("0 0 9 ? * 2"))
    .build();
// Or with name alias:
cronSchedule("0 0 9 ? * MON")

Variations on every week

  • 0 9 * * 1 - every Monday at 09:00.
  • 0 17 * * 5 - every Friday at 17:00.
  • 0 9 * * 1-5 - every weekday at 09:00 (5x as frequent).
  • 0 0 * * 1,4 - twice a week, Monday and Thursday - see the bi-weekly FAQ.
  • 0 9 * * 1,3,5 - every Monday, Wednesday and Friday at 09:00.
  • 0 0 * * 0,6 - every weekend (both days) at midnight.
  • 0 0 * * * - every day (7x as frequent).
  • 0 0 1 * * - every month (~4x less frequent).

Weekly cron pitfalls

  • 0 vs 7 confusion - both mean Sunday in Unix cron. Quartz uses 1=Sunday. Always verify the firing day on the calendar before shipping.
  • Bi-weekly is not native - cron has no “every other week”. Schedule weekly and gate the actual work on `date +%V` (ISO week number) modulo 2 - or use a job runner with interval semantics.
  • First-occurrence-of-week - Quartz supports 2#1 for the first Monday of the month. Standard cron has no equivalent.
  • Year boundary - week numbers reset at the year boundary. If your weekly job needs continuity across December/January, drive it from a date counter rather than ISO week.

Examples

  • 0 18 * * *
    Every day at 18:00
  • 0 */5 * * *
    Every 5 hours
  • 0 18 * * 1-5
    Weekdays at 18:00
  • 0 0 1 * *
    Once a month, on the 1st at midnight

Cheatsheet

Full cheatsheet
FieldReq.RangeWildcards
minuteyes0-59, - * /
houryes0-23, - * /
day of monthyes1-31, - * /
monthyes1-12 or JAN-DEC, - * /
day of weekyes0-6 or names; some dialects use 0-7 or 1-7 — see Dialects, - * /

Frequently asked questions

Syntax

What is the cron expression for every week?

0 0 * * 0 runs every Sunday at midnight in Vixie cron. Vixie also accepts 7 for Sunday; other dialects use different weekday numbering, so verify the target scheduler. Expression: 0 0 * * 0

Open in editor
Is there a @weekly cron alias?

Yes. Many Vixie-derived implementations accept @weekly as a shortcut for 0 0 * * 0, Sunday at midnight. Vercel, AWS, and Quartz require explicit cron expressions.

Timing

Is every week the same as every 7 days?

No. 0 0 * * 0 fires every Sunday - exactly once per calendar week, regardless of when it last fired. A 0 0 */7 * * cron would fire on day-of-month 1, 8, 15, 22, 29 - and reset at the month boundary, which is rarely what 'every 7 days' actually means.

How do I run a weekly job during business hours, e.g. Monday at 9 AM?

0 9 * * 1 - at 09:00 every Monday. Use 1 for Monday in standard cron (or MON if your scheduler accepts aliases). For weekly on a specific weekday plus a backup the next day: 0 9 * * 1,2. Expression: 0 9 * * 1

Open in editor
Can cron run every other week?

Not with a portable cron expression alone. Schedule weekly and gate execution with stored state or a date-aware wrapper that preserves continuity across year boundaries.

Days and months

What numbers map to which weekdays?

In Vixie cron, 0 and 7 are Sunday, 1 is Monday, through 6 for Saturday. Other dialects differ; Quartz uses 1 for Sunday. Use weekday names when the target supports them.

Should weekly Sunday use 0 or 7?

Vixie cron accepts both 0 and 7 for Sunday. Other platforms differ, so SUN is often clearer when names are supported.

Timezones and DST

How does DST affect a weekly cron?

A weekly local time in a spring-forward gap may be skipped, while a fall-back time can repeat. UTC avoids local-clock ambiguity but shifts wall time seasonally.

Which timezone defines the weekly boundary?

The scheduler's configured timezone defines the weekday and clock time. Set it explicitly when a Sunday or Monday boundary has business meaning.

Platforms

What number means Sunday in Quartz cron?

Quartz uses 1 for Sunday, unlike Vixie cron's 0 or 7. A Sunday-midnight Quartz expression is 0 0 0 ? * 1. Expression: 0 0 0 ? * 1

Open in editor
What is weekly on Monday in AWS EventBridge?

Use cron(0 9 ? * MON *) for Monday at 09:00. AWS requires a year field and ? in day of month when day of week is selected.

What is weekly on Monday in Spring cron?

Use 0 0 9 * * MON. Spring requires a leading seconds field, so this fires at second 0, minute 0, hour 9 each Monday. Expression: 0 0 9 * * MON

Open in editor

Debugging

Can weekly cron jobs overlap?

Yes, if a run lasts into the next scheduled week or duplicate delivery occurs. Use locking and a week-based idempotency key.

Will cron replay a weekly run missed during downtime?

Traditional cron will not. Detect the missing week from persisted state or use a scheduler with durable misfire handling.

Crontap

Can Crontap run a weekly job?

Yes. You can schedule an HTTP job on Crontap with 0 0 * * 0, choosing the timezone that defines Sunday midnight. Expression: 0 0 * * 0

Open in editor

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