What this tool does
A cron generator turns schedule writing back into something visual: pick each field, watch the expression assemble itself, and see immediately what it means and when it will next run five times.
It supports both dialects — Linux crontab with 5 fields (minute hour day month weekday) and Quartz / Spring @Scheduled with 6 (an extra leading seconds field). The confusing part is not the field count but the relationship between day-of-month and day-of-week: in Linux, restricting both means OR; in Quartz you use ? to leave one unspecified and the two are ANDed. Each dialect is implemented to its own spec here.
It also works in reverse: paste an expression that is already running in production and get a plain-language reading plus the next run times — the fastest way to debug "why did my job not fire".
How to use
- Pick the dialect crontab and most Linux schedulers use 5 fields; Java Quartz and Spring @Scheduled(cron = ...) use 6. Choose wrong and the expression will not run on either side.
- Set each field Every field has presets (every 5 minutes, on the hour, weekdays, last day of month…) that fill the value for you, or type an exact form like 1-30/2. The meaning is echoed underneath and mistakes turn red immediately.
- Check the next runs, then copy The next-runs list gives five upcoming times — the cheapest sanity check there is. An empty list means day and month contradict each other (30 February, for instance). Then copy the expression, or download a .txt report for the record.
FAQ
What really differs between 5 and 6 fields?
Only the leading seconds field. Linux crontab is minute hour day month weekday; Quartz is second minute hour day month weekday. Pasting a 5-field expression into Quartz shifts everything by one, so choose the dialect first.
Why does "the 1st" also fire on Mondays?
Because Linux cron ORs day-of-month and day-of-week when both are restricted. To run by date only, set weekday to *; to run by weekday only, set day to *. In Quartz you leave the irrelevant one as ?.
Why is the next-runs list empty?
The combination does not occur within the next eight years. The usual cause is an impossible date (30 February, 31 April), followed by day and weekday locking each other out. Check the month length, then relax one field to *.
Does it support W, # or name aliases?
No, and it does not pretend to — those forms raise a clear error. Implementations differ substantially (W behaves differently across Quartz and various Linux cron flavours), and a half-correct implementation is worse than none. Use numbers for months and weekdays.
Which timezone are the times in?
Your browser local timezone. If the server (or container) runs in another zone or UTC, the real trigger time will differ from what you see here — check the server timezone before deploying, especially around DST switches.
Is my expression uploaded?
No. Parsing, explaining and time computation all happen in your browser with no upload requests. Expressions can carry business context (specific dates, for instance), so local handling is simply safer.
Limits
Supports *, numbers, commas, ranges, steps, plus ? and L in Quartz. W, #, name aliases and the year field are not supported.
Times are computed in the browser timezone only, with no conversion; DST switch days may differ from the server by an hour.
Syntax and existence of matching times only — it does not judge whether a schedule is operationally sane.