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.