ÆON Toolhub

Cron Expression Generator

This free cron expression generator turns a cron line into plain English and lists the next runs in any timezone, in your browser. It reads Unix, Quartz and AWS EventBridge syntax, and flags the three traps that fire silently: the OR rule between day fields, the day-of-week shift across platforms, and daylight saving.

Platform

Sunday is 0 (7 also works). Day-of-month and day-of-week combine with OR, not AND.

In plain English

At 09:00, on weekdays (Monday to Friday).

Next runs

Working out the next runs…

What does this cron tool do?

It translates a cron line into plain English as you type, and then does what a cron editor usually leaves to you: it reads the line back for the traps that fire without any error message.

  • The OR trap, detected. When both day fields are restricted, cron runs when either matches. The page says so, in words, before you deploy it.
  • Three platforms, not one. Unix and Kubernetes (5 fields), Quartz (6 or 7, seconds first), AWS EventBridge (6, year last, question mark required).
  • The day-of-week shift. Write a digit and the page tells you what that same digit means on the other platforms, because it is not the same day.
  • Next runs in any IANA timezone, with that zone's real daylight saving rules.
  • Daylight saving warnings on the actual dates when a run is skipped or happens twice.
  • Two-way editing. Change the whole line, or one field at a time.
  • Nothing leaves your browser. A schedule quietly describes how an internal system works.

The OR trap, which is the famous one

0 0 13 * 5 looks like "midnight on Friday the 13th". It is not.

What you writeWhat you meantWhat cron does
0 0 13 * 5Friday the 13thThe 13th of every month, and every Friday
0 0 1 * MONThe 1st, if it is a MondayThe 1st of every month, and every Monday

When day-of-month and day-of-week are both restricted, they combine with OR. POSIX specifies it and Vixie cron implements it, so this is correct behaviour rather than a bug. Cron simply cannot express the two conditions together in one line.

There is a subtlety almost every home-made parser gets wrong: any value starting with * counts as unrestricted. So a step written in the day-of-month field leaves that field open, and the OR rule never applies. This page follows that rule exactly, which is why it stays quiet on expressions that look similar but are fine.

The same digit, a different day

PlatformFieldsSunday is1 means
Unix, Linux, Kubernetes50Monday
Quartz (Java, Spring)6 or 71Sunday
AWS EventBridge61Sunday

Copy a line from a Linux tutorial into a Spring @Scheduled annotation and every run moves by one day. Nothing errors, nothing warns, and the job simply runs on the wrong day until somebody notices. Writing the day by name (MON) means the same thing on all three.

Daylight saving, the expensive one

Twice a year a local clock either skips an hour or repeats one. A job set for 02:30 can vanish that day; a job set for 01:30 can happen twice.

What a scheduler does about it varies by implementation, so this page tells you the date and the window rather than pretending to know the outcome. Debian cron runs a skipped job shortly after the jump and does not re-run a doubled one. Others skip and repeat. If a second run would double-charge someone, that date is worth knowing in advance.

What this tool does not do

  • It does not run, schedule or monitor anything. There is no backend. It reads and predicts, nothing else.
  • It does not know your server's timezone or cron implementation. It calculates against the zone you pick. A server set to the wrong timezone behaves differently, and no editor can see that from here.
  • It does not predict run times for L, W or #. Those are Quartz extensions with their own rules. The page validates them and then says plainly that it will not guess, because a wrong time here is worse than no time.
  • @reboot has no next run. It depends on when the machine starts, not on the calendar.
  • It does not publish a page per expression. That is how the market leader owns thousands of long-tail searches, and it is exactly the thin, duplicated content this site refuses to make.

Is my expression private?

Yes. Parsing, the English reading, the next runs and every warning run in JavaScript already loaded in your browser. No network request carries your expression, nothing is logged or stored, and closing the tab clears it. Schedules are more revealing than they look: the timing of a backup, a billing run or a data export says a lot about how a system is built.

Frequently asked questions

Why does my cron run on the wrong days?

Most often the OR trap. When day-of-month and day-of-week are both restricted, cron runs when either one matches, not both. So 0 0 13 * 5 fires on the 13th of every month and, separately, on every Friday. It is not Friday the 13th.

How do I schedule something for Friday the 13th in cron?

You cannot express it in one cron line, because the two day fields combine with OR rather than AND. The usual approach is to keep one field as a star, schedule every Friday, and test the day of the month inside the script before doing any work.

What happens to a cron job during daylight saving time?

A job set for a time that gets skipped may not run, and one set inside the repeated hour may run twice. Behaviour differs by implementation: Debian cron runs a skipped job shortly after the jump and does not repeat a doubled one, while others do neither.

Is 1 Monday or Sunday in a cron expression?

It depends on the platform, which is why copied lines break. Unix and Kubernetes count Sunday as 0, so 1 is Monday. Quartz and AWS EventBridge count Sunday as 1, so 1 is Sunday there. Writing the day by name means the same thing everywhere.

Why does AWS EventBridge need a question mark in cron?

EventBridge uses six fields and requires exactly one of day-of-month or day-of-week to be a question mark, saying which field to ignore. Without it the expression is rejected, which is why a five-field Unix line pasted into EventBridge never validates.

What is the difference between Quartz cron and Unix cron?

Quartz puts a seconds field first and adds an optional year at the end, giving six or seven fields instead of five. It also counts Sunday as 1 rather than 0, and uses a question mark in one day field. The same characters mean different things.

Does the star slash two step trigger the OR trap?

No, and this catches people writing their own parsers. Cron treats any value starting with a star as unrestricted, so a step written that way in the day-of-month field leaves it unrestricted and the OR rule never kicks in. This page follows that rule exactly.

Can I see when a cron job runs in my timezone?

Yes. Pick any IANA timezone and the next runs are worked out against that zone, including its daylight saving rules. Bear in mind the schedule actually follows whatever timezone your server or scheduler is configured with, not the one you pick here.

What does @reboot mean in crontab?

It runs the job once when the machine boots, rather than at a clock time. Because it depends on startup and not the calendar, no tool can predict when it will next happen, so this page says so instead of showing invented times.

Is my cron expression sent to a server?

No. Parsing, the plain English reading, the next run times and every warning are worked out by JavaScript already in your browser. Nothing is uploaded, logged or stored, and closing the tab clears it. Schedules often reveal how internal systems work.

Rate Cron Expression Generator & help shape it

This tool is free and still growing. Tell us what works, what you would change, and what is missing. Your feedback is what decides what we build next.

Your rating

Last updated: September 20, 2026