Skip to content

Every Monday cron: what 0 9 * * 1 means for a start-of-week job

Runs in your browser — nothing you paste leaves this page. How we prove that

Cron Expression Tester playground

Example

Five fields — minute, hour, day of month, month, day of week. Macros like @daily are supported too.

Results update as you type — press Enter to run now.

Timezone
fig. 04 — cron-expression-tester · scheduling Valid
Result

At 09:00, on Monday.

Minute0
Hour9
Day of month*
Month*
Day of week1
Next runs
  • Computed in your browser, in your timezone.

`0 9 * * 1` fires once a week, at 09:00 on Monday. The engine reads it as: At 09:00, on Monday.

Reading 0 9 * * 1

The first two fields pin the time to 09:00, the date fields are wildcards, and the day-of-week field is 1, which is Monday in standard cron (0 and 7 are Sunday). MON is accepted in place of 1 by the common implementations and by this page's parser.

The parser reads it as: At 09:00, on Monday. The next run times in the panel above are computed in your browser, in your own timezone, so they are not printed in this text.

What Monday jobs are for

Start-of-week jobs typically summarise the previous seven days: dependency update reports, cost reports, stale-branch cleanups, on-call handover notes. 0 9 * * 1 /opt/finops/bin/weekly-cost-report --window 7d is a representative line. Compute the reporting window from explicit dates, not from now minus seven days, so a delayed or retried run still reports the same week.

A weekly job fails silently more easily than a frequent one: if it breaks, nobody notices for a week. Send its exit status somewhere, or use a dead-man's-switch check that alerts when the Monday ping does not arrive.

Pitfalls: first Monday and timezones

Adding a day of month does not narrow it down. 0 9 1-7 * 1 runs on the 1st to the 7th of every month and on every Monday, because cron combines a restricted day of month and day of week with OR. For the first Monday only, keep 0 9 * * 1 and let the command exit unless the date is 7 or lower.

The weekday is evaluated in the cron daemon's zone. A job at 09:00 Monday in Sydney is 22:00 or 23:00 on Sunday in UTC, so converting the hour for a UTC server, or for GitHub Actions, can move the job to a different day as well.

systemd, Kubernetes and GitHub Actions

systemd: OnCalendar=Mon *-*-* 09:00:00; note that systemd's own weekly shorthand also means Monday, but at 00:00. Kubernetes accepts schedule: "0 9 * * 1" with an optional timeZone. GitHub Actions runs it at 09:00 UTC on Monday. Related: every weekday for Monday to Friday, every Sunday for the end of the week.

FAQ

Questions, answered.

Tap a question to expand the answer.

Yes. Vixie cron, cronie, Kubernetes and GitHub Actions all accept three-letter day names, so 0 9 * * MON is the same schedule.

Cron cannot express a two-week interval. Schedule it every Monday and have the command exit on odd ISO week numbers, for example by testing date +%V (written with a backslash before the percent sign inside a crontab).

More free, private DevOps tools.

The Cron Expression Tester is one tool in OpsCanopy — a growing canopy of browser-based validators, converters and testers that never touch a server.

New to Linux?  Read the Linux guide →

42 free tools, every one offline-capable — opscanopy.com works with no signup and nothing uploaded.

Scheduling on Linux? Pair this with the Cron to systemd Converter, or browse the full tools directory.

Not affiliated with or endorsed by any cron implementation. Format names are used only to describe what this tool reads. OpsCanopy is free and open.