AWS EventBridge Scheduler Cron Guide
AWS EventBridge Scheduler (and its predecessor, EventBridge/CloudWatch Events rules) supports two expression types: rate expressions (rate(5 minutes)) for simple fixed intervals, and cron expressions for anything calendar-based — but AWS's cron syntax is Quartz-derived, not standard POSIX cron, which trips up anyone copying an expression straight from a Linux crontab.
Syntax Notes
AWS cron expressions have 6 required fields: minutes, hours, day-of-month, month, day-of-week, year — and critically, exactly one of day-of-month or day-of-week must be a question mark (?), never both wildcards, unlike standard cron's OR semantics.
Examples
cron(0 8 * * ? *)rate(10 minutes)cron(0 9 ? * 2#1 *)Gotchas
- Standard cron's `0 8 * * *` is invalid in AWS EventBridge — you must use `?` in either the day-of-month or day-of-week field, since AWS forbids both being wildcards simultaneously (unlike standard cron's OR-based resolution).
- AWS cron expressions always run in UTC — there's no per-rule timezone setting in the older CloudWatch Events cron rules (EventBridge Scheduler, the newer service, does support a `ScheduleExpressionTimezone` field, so check which service you're actually using).
- The 6-field format includes a year field that standard cron doesn't have — omitting it or getting the field order wrong is a frequent copy-paste error when porting expressions from a Linux crontab.
Best Practices
- Use rate() expressions instead of cron() whenever you just need a fixed interval ("every N minutes/hours/days") — they're simpler and less error-prone than the equivalent cron syntax.
- If using the newer EventBridge Scheduler (not legacy CloudWatch Events rules), set `ScheduleExpressionTimezone` explicitly rather than mentally converting to UTC — it removes an entire class of DST-related bugs.
- Always test a new schedule expression with AWS's schedule expression validator in the console before deploying, since a malformed 6-field expression fails at rule-creation time, not at runtime.
Frequently Asked Questions
- Why does AWS reject my standard cron expression?
- AWS uses a Quartz-derived 6-field format that requires a year field and a `?` in either day-of-month or day-of-week — standard 5-field POSIX cron expressions aren't valid as-is and need to be adapted.
- What's the difference between rate() and cron() in EventBridge?
- rate() expresses a simple fixed interval like rate(5 minutes) or rate(1 day). cron() expresses calendar-based schedules (specific times, specific days) using the 6-field AWS cron format — use whichever matches your actual requirement.
- Does EventBridge Scheduler support timezones other than UTC?
- The newer EventBridge Scheduler service supports a ScheduleExpressionTimezone parameter using IANA timezone names. The older CloudWatch Events (EventBridge rules) cron syntax is UTC-only.
Related Tools
Platform Guides
Cron syntax for Linux, Kubernetes, AWS, and more
Google Cloud Scheduler Guide
How to schedule jobs with Google Cloud Scheduler: standard 5-field cron syntax (unix-cron), timezone support, and HTTP/Pub/Sub targets.
Azure Functions Timer Trigger Guide
How Azure Functions timer triggers use NCRONTAB syntax: the 6-field seconds-first format, UTC defaults, and common configuration examples.