Cron Atlas

Cron expression for every Monday, Wednesday and Friday

0 9 * * 1,3,5
minute0
hour9
day of monthevery day
monthevery month
day of weekMon, Wed, Fri

At 09:00, on Mondays, Wednesdays and Fridays.

Next 10 runs

In Cron, worked out in your browser from the current time.

At a glance

Runs
3 a week
Gap between runs
2 days to 3 days
Expressible in
All six dialects
Clock changes
No effect in the zones checked

Open in the tester

In each dialect

Every expression here is generated by the tester’s own engine and checked run for run against the others, so “Exact” means the same clock times in the same zone. Each one links to the tester.

0 9 * * 1,3,5 /path/to/command
  • Runs in the machine’s time zone. cronie also reads a CRON_TZ= line above the entry; other crons may not.
Exact
aws events put-rule --name monday-wednesday-friday --schedule-expression "cron(0 9 ? * MON,WED,FRI *)"
  • Wrap it in cron(…). Day of week is set (MON,WED,FRI), so day of month has to be ?. The final * is the required year field.
  • In numbers MON,WED,FRI is 2,4,6, because Sunday is 1 here. Unix cron’s numbers would be off by one.
  • Scheduled rules always run in UTC. For local times, create it in EventBridge Scheduler with --schedule-expression-timezone.
Exact
CronScheduleBuilder.cronSchedule("0 0 9 ? * MON,WED,FRI")
  • The leading 0 is the seconds field, so it fires at the top of the minute. Day of week is set (MON,WED,FRI), so day of month has to be ?. The optional year is left off.
  • In numbers MON,WED,FRI is 2,4,6, because Sunday is 1 in Quartz.
  • Uses the JVM’s default zone unless the trigger sets one with inTimeZone.
Exact
schedule: "0 9 * * 1,3,5"
  • Without timeZone under spec, these times are in the kube-controller-manager’s zone. A CRON_TZ= prefix in the schedule fails validation.
Exact
- cron: '0 9 * * 1,3,5'
  • GitHub warns that schedules can be delayed at high load, which includes the start of every hour, and that some queued jobs may be dropped. A different minute reduces the risk.
  • Times are UTC unless you add timezone: beside cron, with an IANA name.
Exact
[TimerTrigger("0 0 9 * * Mon,Wed,Fri")]
  • Six fields with seconds first, so the leading 0 fires at the top of the minute.
  • Azure numbers days 0–6 from Sunday, like Unix cron, and matches names by prefix, so keep to three letters.
  • UTC unless the app sets WEBSITE_TIME_ZONE, which Linux Consumption and Flex Consumption plans do not support.
Exact

About this schedule

Three fixed days a week at 09:00, written as a list in the day-of-week field. A step such as 1-5/2 gives the same days in cron, but EventBridge does not allow steps in that field, so a list is the form that works everywhere.

Clock changes

None of these times falls in the hour that clocks skip or repeat in New York, London, Berlin, Helsinki or Sydney, so every dialect runs it normally all year there. Zones that change clocks at other hours can still differ.

Questions

What is the cron expression for every Monday, Wednesday and Friday?
0 9 * * 1,3,5 in standard cron, Kubernetes and GitHub Actions. The other dialects differ: 0 9 ? * MON,WED,FRI * in EventBridge; 0 0 9 ? * MON,WED,FRI in Quartz; 0 0 9 * * Mon,Wed,Fri in Azure.
Which time zone does it run in?
It depends on the scheduler. GitHub Actions, EventBridge rules and Azure use UTC unless you set a zone (timezone, EventBridge Scheduler’s --schedule-expression-timezone, WEBSITE_TIME_ZONE). Kubernetes uses .spec.timeZone or the controller manager’s zone, Quartz the JVM’s zone or inTimeZone, and cron the machine’s zone or CRON_TZ.

More schedules