Skip to content
Owais Khan Software Reviews

Cron to AWS EventBridge Cron Converter

Paste a standard five-field cron line and get an EventBridge cron() expression that actually validates — day of week renumbered, the question-mark rule applied, and either-or schedules split into the two rules EventBridge needs.

Everything runs locally: what you type never leaves your browser.

Convert a cron expression to EventBridge

EventBridge schedule expression

cron(0 9 ? * 2-6 *)
  • EventBridge rules run in UTC. Standard cron runs in the server’s local time zone, so shift the hours if they differ.
Field by field
Field Standard cron EventBridge
Minute 0 0
Hour 9 9
Day of month * ?
Month * *
Day of week 1-5 2-6
Year — *

Next runs (UTC)

  1. Listed here when JavaScript is available.

AWS CLI

aws events put-rule --name weekday-9am --schedule-expression "cron(0 9 ? * 2-6 *)"

Terraform

resource "aws_cloudwatch_event_rule" "weekday_9am" {
  name                = "weekday-9am"
  schedule_expression = "cron(0 9 ? * 2-6 *)"
}

AWS CDK (TypeScript)

new events.Rule(this, 'weekday-9am', {
  schedule: events.Schedule.expression('cron(0 9 ? * 2-6 *)'),
});

What changes between the two formats

The example above is 9:00 every weekday. In standard cron that is 0 9 * * 1-5; in EventBridge it is cron(0 9 ? * 2-6 *). Three things moved. A sixth Year field appeared. The day of week went from 1-5 to 2-6, because EventBridge counts Sunday as 1 where Linux counts it as 0. And the day-of-month field became a question mark, because EventBridge will not accept a value in both day fields.

The EventBridge cron day of week question mark, explained

Most people meet the EventBridge cron day of week question mark rule through an error message. It exists because standard cron has an odd rule of its own: when both day fields are restricted, a job runs when either matches. So 0 0 1 * 1 fires on the 1st of the month and on every Monday. EventBridge will not express that in a single rule — so this converter produces two, and the next-run list shows the combined schedule so you can check it is what you meant.

An AWS EventBridge cron generator for existing schedules

If you need to convert Linux cron to AWS cron, you usually already have a working crontab and want the same schedule in the cloud, not a blank AWS EventBridge cron generator. Paste the line exactly as it is in your crontab, including @daily-style nicknames, and every field is validated before it is converted, with a plain explanation when something cannot carry over.

Where these rules come from

The six-field format, the 1 = Sunday numbering and the question-mark requirement are from AWS’s EventBridge schedule-expression reference. The either-or behaviour is standard cron’s own, as implemented in Vixie cron: when both day fields are restricted — neither begins with * — they are combined with OR, not AND.

Frequently asked questions

Why does EventBridge say "Parameter ScheduleExpression is not valid"?
Almost always because a standard cron line was pasted in unchanged. EventBridge needs six fields, not five — a Year field is added at the end — and it will not accept a value or * in both the day-of-month and day-of-week fields: one of them must be a question mark. A line like 0 9 * * 1-5 fails on both counts, and fails a third way too, because EventBridge numbers the days of the week differently.
What is the difference between standard Linux cron and EventBridge cron?
Four things. EventBridge adds a sixth Year field. It numbers days of the week 1 = Sunday to 7 = Saturday, where Linux cron uses 0 = Sunday to 6 = Saturday (and also accepts 7 for Sunday). It requires a question mark in either the day-of-month or the day-of-week field. And it runs in UTC, while Linux cron runs in the server’s local time zone. Minutes, hours, days of the month and months are written the same way in both.
Why does EventBridge require a question mark (?) in cron expressions?
The question mark means “no specific value”, and EventBridge uses it to avoid an ambiguity standard cron handles with a surprising rule. In Linux cron, if you restrict both the day of the month and the day of the week, the job runs when EITHER matches — 0 0 1 * 1 runs on the 1st and on every Monday. EventBridge refuses to guess: you pick one day field and set the other to ?. A true either-or schedule needs two rules, which this converter produces.
How do I convert a 5-field cron to a 6-field EventBridge schedule?
Keep the minute, hour, day-of-month and month fields as they are. Add 1 to every numeric day of week (0 becomes 1, 1-5 becomes 2-6, and 7 also becomes 1), or leave day names like MON-FRI unchanged. Put ? in whichever day field you are not using, append * as the year, and wrap the result in cron( ). If both day fields were restricted, split it into two rules. The converter above does all of this and shows the result field by field.
What time zone do EventBridge cron schedules use?
EventBridge rules always evaluate cron expressions in UTC. If your original cron ran on a server in another time zone, shift the hour field by the offset — and remember that a fixed UTC hour drifts by an hour against local time across daylight-saving changes. EventBridge Scheduler, a separate service, can take a time zone directly if that drift matters.
Is my cron expression sent anywhere?
No. The converter runs entirely as a small script inside this page; what you type never leaves your browser, and there is no upload, no API call and no analytics here. That is enforced rather than promised: this site’s test suite scans the shipped HTML for every browser API capable of sending data off the page and fails the build if it finds one.