Cron every Monday

0 9 * * 1

0 9 * * 1 runs a job every Monday at 09:00. The last field is the day of week: 0 or 7 is Sunday, 1 is Monday, through 6 for Saturday. 0 9 * * MON means the same in most crons.

When it fires

Checked at 09:58 UTC on Wednesday, October 14, the next five runs are:

Oct 19  Oct 26  Nov 2  Nov 9  Nov 16    (all at 09:00)

For Monday at midnight, use 0 0 * * 1. For the start of the week in places where it’s Sunday, 0 0 * * 0, which is also what @weekly means.

Don’t add a date too

Setting both the day of month and the day of week makes cron run on either, not both. 0 9 1 * 1 runs on the 1st of every month and on every Monday. To run only on the first Monday, keep the day of week and check the date in the command: 0 9 1-7 * * [ "$(date +\%u)" = 1 ] && job.sh.

The same schedule elsewhere

  • GitHub Actions: cron: '0 9 * * 1', at 09:00 UTC.
  • Kubernetes CronJob: schedule: "0 9 * * 1".
  • AWS EventBridge: cron(0 9 ? * MON *). In AWS, Monday is 2, so use the name.
  • systemd timer: OnCalendar=Mon 09:00.
  • Spring @Scheduled: 0 0 9 * * MON.

Try it in the Cron Builder

At 09:00, only on Monday

Read as a crontab line, where Sunday is 0 or 7.

minutehourday of monthmonthday of week
09**1

Next runs

Working out the next runs from your clock…

Runs in your browser. Nothing you enter is sent anywhere.