Cron Expression Generator & Explainer

Build or paste cron schedules for crontab, Kubernetes, GitHub Actions, AWS, Quartz or Spring, and see them in plain English with the next run times.

Build a schedule

On

Fields

FieldValueMatches

Next 10 runs

WhenFrom now

Same schedule elsewhere

How to use it

Pick where the schedule will run under Format, then type or paste an expression. The plain-English description, the field breakdown and the next 10 run times update as you type, and errors name the field and value at fault. Or pick a schedule under Build a schedule and the expression is written for you. Switching the format converts the current expression when the other system can express it, and Same schedule elsewhere shows it in every other format, including a systemd timer.

Run times are shown in the time zone you choose. Crontab, Quartz and Spring use the server’s zone and AWS EventBridge rules use UTC. GitHub Actions uses UTC unless the schedule sets timezone, and a Kubernetes CronJob uses its timeZone field; the converted snippets include the zone you pick.

Cron syntax

Each field takes * for every value, a value, a range such as 9-17, a list such as 1,15, or a step: */15 is every 15th value from the start of the range, and 1-10/2 means 1, 3, 5, 7, 9. Month and weekday names such as JAN and MON-FRI work too. A step restarts every hour or day, so */7 in the minute field fires at :56 and again at :00.

The formats compared

Format Fields Sunday is Both day fields set
crontab min hour day month weekday 0 or 7 either one matches
GitHub, Kubernetes min hour day month weekday 0 (range 0–6) either one matches
Spring, node-cron sec min hour day month weekday 0 or 7 both must match
Quartz sec min hour day month weekday [year] 1 not allowed: one must be ?
AWS EventBridge cron(min hour day month weekday year) 1 not allowed: one must be ?

Quartz, Spring and AWS add special values: L is the last day of the month (L-3 three days before it), 15W the weekday nearest the 15th, LW the last weekday, FRI#3 the third Friday and FRIL or 6L the last Friday. Mind the weekday numbers: 5 is Friday in crontab but Thursday in Quartz and AWS, so the page writes names when it converts.

In crontab, when both day fields are restricted the job runs on days that match either: 0 12 13 * 5 runs on every 13th and every Friday. In Vixie cron and cronie a field that starts with *, even */2, counts as unrestricted, so 0 0 */2 * 1 runs only on odd-numbered Mondays. Kubernetes treats */2 as a restriction and would also run on every Monday.

AWS also takes rate(5 minutes), which counts from when the rule was created, and GitHub runs scheduled workflows at most every 5 minutes, often a little late at the top of the hour.

Shortcuts

Crontab, Kubernetes and Spring accept @yearly (@annually), @monthly, @weekly, @daily (@midnight) and @hourly, which stand for 0 0 1 1 *, 0 0 1 * *, 0 0 * * 0, 0 0 * * * and 0 * * * *. Crontab’s @reboot runs once when the cron daemon starts.

Daylight saving time

For crontab the run list follows Vixie cron and cronie: on the night clocks go forward, a fixed-time job such as 30 2 * * * runs right after the jump, while * jobs skip the missing times; when an hour repeats, fixed-time jobs run once and * jobs run in both copies. Other schedulers differ, so the list only flags such runs for them. Keep important jobs out of the 01:00–03:00 window, or run them on UTC.

Frequently asked questions

How do I run a cron job every 5 minutes?

Use */5 * * * * in crontab, GitHub Actions or Kubernetes, 0 */5 * * * * in Spring, 0 0/5 * * * ? in Quartz and cron(0/5 * * * ? *) or rate(5 minutes) in AWS EventBridge.

Is Sunday 0 or 7 in cron?

Both, in crontab and Spring. Kubernetes accepts only 0 (its range is 0 to 6) and GitHub Actions documents 0 to 6 too. Quartz and AWS number the days from 1 (Sunday) to 7 (Saturday) instead. Writing the names SUN to SAT avoids the confusion.

Why does my job run on more days than I expected?

In crontab, if you set both the day of month and the day of week, the job runs on days that match either one, so 0 0 1 * 1 runs on the 1st and on every Monday. Set one field to * to use only the other.

Can cron run a job every few seconds?

Not crontab, which has minute precision. Quartz and Spring have a seconds field, so */10 * * * * * in Spring runs every 10 seconds. For a system job, a systemd timer can run every few seconds too.

Is my cron expression sent anywhere?

No. Parsing, the description, the conversions and the run times are all computed by JavaScript in your browser. Nothing you type is uploaded or stored.