Three Times a Week Cron Expression
Runs Monday, Wednesday, and Friday at midnight.
0 0 * * 1,3,5 in POSIX cron
Expression
0 0 * * 1,3,5Try it in the tester →Field Breakdown
How It Works
Day-of-week list `1,3,5` — the classic Mon/Wed/Fri cadence used for gym schedules, deploy cycles, and digest emails.
Example Run Times
- Mon 00:00:00
- Wed 00:00:00
- Fri 00:00:00
- Mon 00:00:00 (+7d)
- Wed 00:00:00 (+7d)
Frequently Asked Questions
How about Tue/Thu/Sat instead?
Use `2,4,6`: `0 0 * * 2,4,6` fires Tuesday, Thursday, and Saturday at midnight.
0 0 * * 1,3,5 in Quartz / Spring
Monday, Wednesday, Friday at 00:00 — the alternating-weekday classic, 156 firings a year. The day field 2-6/2 walks the Quartz week in steps of two: 2, 4, 6, which under Sunday-first numbering are exactly Mon, Wed, and Fri.
Quartz / Spring expression
0 0 0 ? * 2-6/2Try it in the tester →At 00:00:00 on Mon, Wed, Fri
Unix / POSIX equivalent: 0 0 * * 1,3,5
@Scheduled parser uses 0–7 with Monday = 1 — numeric day values mean different days in the two. The day names (MON, FRI, MON-FRI) are identical in both and safer to copy between them.Field Breakdown
Using It with Quartz / Spring
The every-other-weekday rhythm shows up wherever daily is too much and weekly too little: thrice-weekly digest emails, scheduled dependency or vulnerability scans, batch model retraining, even deploy trains in lower-velocity teams. Spring binds it with @Scheduled(cron = "0 0 0 ? * 2-6/2") and standalone Quartz with the usual CronScheduleBuilder call. The schedule never touches a weekend, so each Friday run's output sits unrefreshed until Monday — worth a banner timestamp on any dashboard it feeds.
Quartz-Specific Notes
- →Step expansion: 2, 4, 6 within the 2-6 range — Monday, Wednesday, Friday. The same intent written as names, MON,WED,FRI, parses to an identical trigger.
- →Gaps alternate 48-48-72 hours across the week; weekend-spanning deltas are half again larger than midweek ones.
- →Translating this back to a five-field crontab requires shifting every value down by one (1,3,5) — copying 2-6/2 into a Unix crontab would run Tue/Thu/Sat instead.
Frequently Asked Questions
What's the Tuesday/Thursday/Saturday version?
Shift the range up one day: 0 0 0 ? * 3-7/2 expands to days 3, 5, 7 — Tuesday, Thursday, Saturday in Quartz numbering.
Is 2-6/2 safer than listing MON,WED,FRI?
They're the same schedule, so safety is equal; readability is not. The list form survives code review without anyone re-deriving step arithmetic, which is why many teams normalize generated step expressions to names before committing.
Why three runs some weeks but the data looks stale on Mondays?
The Friday-to-Monday gap is 72 hours versus 48 midweek. If Monday's run aggregates "since last run," it's processing 50% more elapsed time — usually fine, but worth knowing when Monday runs take visibly longer.
0 0 * * 1,3,5 in AWS EventBridge
The Monday/Wednesday/Friday classic: 2-6/2 steps through EventBridge's weekday numbers by two, matching 2, 4, and 6 for 156 fires a year at 00:00 UTC. Alternate-weekday spacing keeps any backlog to at most two days during the week.
AWS EventBridge expression
cron(0 0 ? * 2-6/2 *)Try it in the tester →At 00:00 UTC on Mon, Wed, Fri
Unix / POSIX equivalent: 0 0 * * 1,3,5
Field Breakdown
Using It with AWS EventBridge
This rhythm suits jobs where daily is wasteful but weekly lets problems compound: certificate-expiry sweeps that still leave time to renew anything flagged, ANALYZE/statistics refreshes on warehouse tables that degrade gradually, or a content pipeline that publishes on the Mon/Wed/Fri editorial calendar. Configure it as the ScheduleExpression on a rule or a Scheduler schedule and reuse the single rule for all three days — the fires differ only in their event timestamp.
AWS-Specific Notes
- →2-6/2 expands to {2,4,6}, identical to the list MON,WED,FRI; nothing fires on 3, 5, or the weekend days 1 and 7.
- →Gaps are two, two, and three days — the Friday-to-Monday hop spans the weekend, so the Monday run regularly faces about 50 percent more accumulated input than the other two.
- →00:00 UTC on these days is the prior evening throughout the Americas; the "Monday" run is a Sunday-night event for US operators reading the on-call schedule.
Frequently Asked Questions
How would I move this pattern to Tuesday/Thursday/Saturday?
Shift the range one day: cron(0 0 ? * 3-7/2 *) matches 3, 5, and 7. An explicit 3,5,7 — or TUE,THU,SAT — expresses the same thing more legibly.
Why does Monday's run take noticeably longer than Wednesday's and Friday's?
It covers a three-day window (Friday midnight to Monday midnight) versus two days for the others. Size timeouts and batch limits for the Monday volume, not the average.
Does anything run on the weekend with this expression?
No — Saturday is 7 and Sunday is 1, and neither is in the matched set {2,4,6}. Weekend data simply waits for the Monday fire.
0 0 * * 1,3,5 in GitHub Actions
The Monday/Wednesday/Friday triple: day-of-week list 1,3,5 fires at 00:00 UTC three times a week, 156 runs a year. The gaps run 48 hours, 48 hours, then 72 over the weekend — frequent enough to feel continuous on weekdays while leaving Saturday and Sunday untouched.
GitHub Actions expression
0 0 * * 1,3,5Try it in the tester →At 00:00 UTC on Mon, Wed, Fri
Unix / POSIX equivalent: 0 0 * * 1,3,5
Field Breakdown
Using It with GitHub Actions
Committed as on: schedule: - cron: "0 0 * * 1,3,5" to the default branch, MWF cadence is a favorite for scheduled deploy trains to staging, link-rot and broken-badge checkers across documentation, and batched dependency-update PRs that would overwhelm reviewers if opened daily. The pattern interleaves cleanly with a Tue/Thu schedule in a sibling workflow when two processes must never run the same day. Friday's run is the last word until Monday, so anything it publishes needs to be trustworthy unattended for three days.
GitHub-Specific Notes
- →Monday's tick follows a 72-hour weekend gap versus 48 hours midweek, so the Monday run consistently processes about half again as much accumulated change — set timeouts and batch sizes for the Monday case, not the average.
- →The same three days can be written as a stepped range, 1-5/2, which walks 1, 3, 5 — equivalent output, though the explicit list is kinder to the next person reading the file.
- →All three fire times are midnight UTC, which the Americas experience as Sunday, Tuesday, and Thursday evenings — the "Friday" run reaches a California dashboard on Thursday at 4 or 5 PM.
Frequently Asked Questions
What is the cron for Tuesday, Thursday, Saturday instead?
0 0 * * 2,4,6 — the same three-per-week structure shifted by one day, with the long 72-hour gap falling between Saturday and Tuesday instead of over the weekend.
Why does Monday's run take noticeably longer than Wednesday's or Friday's?
It is digesting a three-day backlog while the other two handle two days each. If the job's cost scales with accumulated changes, Monday carries roughly 50% more input — budget its timeout accordingly rather than tuning to the midweek runs.