PatternCron

Monday morning kick-off

The weekly-report and sprint-kickoff schedule: fires at 08:00 every Monday, and not on any of the other six days.

Last updated

Pattern
0 8 * * 1
Open in Crontab Schedule Creator

In plain English

  • Fires at 08:00 every Monday
  • 52 runs per year

Why it’s written this way

Hour 8, minute 0, day-of-week 1 — cron counts Monday as 1 and Sunday as 0 (or 7), so this is unambiguously the first weekday, not 'the first day of the week' under every calendar convention.

This is the natural expression for a once-a-week job anchored to a specific weekday, as opposed to the @weekly macro, which is fixed to Sunday midnight and can't be moved without switching to the five-field form anyway.

Edge cases to know

  • →A public holiday that falls on Monday doesn't get skipped — the report or kickoff fires exactly the same, possibly to an inbox nobody is reading.
  • →If the job depends on data finalized over the weekend, an 08:00 fire time can race a Sunday-night batch that hasn't finished yet — pad the hour if upstream jobs are inconsistent.
  • →Moving this to Tuesday is a one-character edit (1 → 2), but it's just as easy to change the wrong field by mistake — always re-read the field's position, not just the digit.

Part by part

0 8
Eight in the morning, minute zero. Early enough to be ready before the working day and late enough that overnight maintenance has finished.
* * 1
Day-of-month and month open, day-of-week fixed to Monday. Monday is 1 because the field starts at Sunday, which is 0.

Common mistakes

  • 0 8 * * 1 /app/report.sh --date=$(date +%Y-%m-%d)

    The percent sign is special in a crontab — it is turned into a newline, and everything after the first one becomes standard input to the command. The date format silently breaks the line.

    0 8 * * 1 /app/report.sh --date=$(date +\%Y-\%m-\%d)
  • 0 8 * * 1 with the crontab file lacking a trailing newline

    Several cron implementations ignore the final line if the file does not end in a newline. The entry is present in crontab -l and never fires, which is a genuinely baffling failure.

  • 0 8 * * MON

    Day names are supported in Vixie cron and not everywhere that accepts cron syntax. The numeric form is the portable one, and a comment gives the readability the name would have.

Questions

Why does my command break when it contains a percent sign?

Cron treats an unescaped percent as a newline, sending the remainder to the command as input. Any date format string needs each percent escaped with a backslash, which is the single most common crontab syntax trap.

How do I test the line without waiting a week?

Run the command portion by hand first with env -i to simulate cron's empty environment. That catches PATH and variable problems, which are far more common than the schedule itself being wrong.

What happens to a Monday that is a public holiday?

It runs. Cron has no calendar beyond the fields you give it, so a holiday check belongs in the script — usually against a list you maintain, since no portable source exists.

How do I edit a crontab safely?

Keep it in version control and install it with crontab from that file, rather than editing live with crontab -e. A stray keystroke in the editor can remove a line with no record of what was there.

Related in Patterns