Skip to the tool
DevToolBench

Cron Every Monday

Weekly Monday jobs, without the off-by-one.

minute hour day-of-month month day-of-week

At 09:00 on Monday.

Fields

minute
0
hour
9
day of month
*
month
*
day of week
1

Next 5 runs

Times shown in your own timezone.

Common schedules

Monday schedules

ExpressionWhat it doesCopy
0 9 * * 1Monday morning, at nineAt 09:00 on Monday.
0 0 * * MONMonday at midnight, written by nameAt 00:00 on Monday.
0 9 * * 1-5Every working morning, not just MondayAt 09:00 on every day-of-week from Monday through Friday.
0 9 * * 1,4Twice a week: Monday and ThursdayAt 09:00 on Monday and Thursday.

Everything runs in your browser. Nothing you type is sent to a server.

Found a bug in this tool? Report it.

The weekly Monday schedule

A cron every monday schedule fires once a week, on the day the day-of-week field names. The anchor in the panel above puts it at nine in the morning, because a weekly job almost always exists for a person — a digest, a report, a reminder that a certificate expires soon — and the hour matters as much as the day. Change the first two fields and the sentence under the input changes with you.

Numbers, names, and the day that answers to two

The field accepts 0 through 7. Sunday is 0 and Sunday is also 7, which is not a quirk so much as a truce between two conventions: ISO weeks start on Monday, the C library starts on Sunday, and cron declined to choose. Monday is 1 either way, so a Monday schedule is one of the safe ones, and so are Friday at 5 and Saturday at 6. It is Sunday that people write as 1, by counting from the wrong end.

Three-letter names sidestep the whole question. Writing MON reads correctly to whoever opens the crontab next, and the parser treats it identically to the number. Case does not matter, and neither does whether the rest of the line uses names or digits.

The union rule that turns weekly into daily

The single most expensive mistake in this field is combining it with the day-of-month field. Cron evaluates the two with OR when both are restricted, so naming the 1st of the month and Monday produces a job that runs on the 1st and on every Monday — roughly five times more often than intended, on days that look arbitrary from the outside.

The rule only applies when both are narrowed. Leave the day-of-month field as a star and the day-of-week field governs alone, which is what a weekly schedule wants. If you genuinely need the intersection — the first Monday of the month, say — the schedule cannot express it and the check belongs in the script.

A weekly job fails quietly

Frequency and feedback move together. A job that runs every minute tells you it is broken within minutes; a weekly one tells you next Monday, if anyone is looking. That asymmetry is worth an explicit signal — a heartbeat to a monitor, a message that says the run finished, anything that turns silence into an alert. Weekly work is also the easiest to leave running long after the reason for it disappeared, so a comment in the crontab saying why the line exists pays for itself.

Picking the hour

Nine in the morning suits a digest that someone reads with coffee. A build or a report that feeds that digest wants to be finished before it, which usually means a small hour on the same day, or the Sunday night before. A weekly job at midnight inherits every problem the midnight schedule has, including the timezone of the host and the two nights a year the clocks move, so the reasoning there applies here once a week instead of daily.

The variants above cover the same weekday written by name, the whole working week, and a twice-weekly pair. For anything else, the cron expression generator reads the line back before you commit it.

Frequently asked questions

Is Sunday numbered 0 or 7 in the day-of-week field?

Both, and they mean the same day. The field accepts 0 through 7 with Sunday at each end, which exists so that people who count the week from Monday and people who count it from Sunday can both write something that works. The parser above normalises 7 to 0, so a list containing both is read as one day, not two.

Should I write the weekday as a number or a name?

Names, wherever the scheduler accepts them. The three-letter abbreviations are unambiguous to a reader who has just opened the crontab, and they remove the only real risk in this field, which is remembering where the week starts. The numbers are still worth knowing because plenty of generated configuration emits them.

Why does my Monday job also run on other days?

Because you restricted the day-of-month field as well. When both day fields are narrowed, cron fires when either one matches, not both. A schedule naming the 1st and Monday runs on the 1st of every month and on every Monday. Leave the day-of-month field as a star unless you truly want the union.

How do I run a job every second Monday?

Not in the schedule. Cron has no notion of alternating weeks, and the day-of-week field cannot express one. The workable pattern is a weekly Monday schedule plus a check at the top of the script that computes the week number and exits early when it is the wrong one.

Related tools

Updated