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
Fields
| Field | Value | Matches |
|---|
Next 10 runs
| When | From 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.