Cron Expression Parser
Enter a 5-field cron expression - 6-field with seconds and @daily-style shorthand also work - to get a plain-English description and the next five run times in your local timezone. Runs entirely in your browser.
About this tool
Enter a cron expression and get a plain-English description plus the next five run times in your local timezone. Standard 5-field expressions work, 6-field with a leading seconds column, and the common @hourly, @daily, @weekly, @monthly and @yearly shorthand. The parser follows classic Vixie cron rules, including the one that surprises everyone: when both day-of-month and day-of-week are restricted, a day matches if either one does.
When to use it
Questions
Why do the run times differ from my server's?
The next runs are computed in your browser's timezone. Servers usually run UTC, so 0 9 * * * fires at a different wall-clock time there. Check the server's timezone before concluding the schedule is wrong.
Can I write JAN or MON in the fields?
No — this parser takes numbers: 1-12 for months and 0-7 for weekdays, where 0 and 7 both mean Sunday. Named values and @reboot are not supported; ranges, lists and steps like */5 work in every field, and ? is accepted as a synonym for *.
What does @daily actually mean?
Midnight, local time — the same as 0 0 * * *. @hourly, @weekly, @monthly and @yearly follow the same pattern. If a job should not sit exactly on midnight next to everyone else's backups, use an explicit minute and hour.
I set both day-of-month and day-of-week — why does it run more often than expected?
Classic cron treats two restricted day fields as alternatives, not a combination: 0 0 1 * 1 runs at midnight on the 1st of every month and every Sunday. Cron has no AND for the two fields, so filter inside the job if you need the intersection.
How do I write a cron that runs every 5 minutes?
*/5 * * * * — five fields: minute, hour, day-of-month, month, day-of-week. The */5 in the minute field is a step: start at 0, then every 5th value, so the job fires at :00, :05, :10 … :55 of every hour, every day. Paste it into the parser above and the plain-English line and next-run list confirm it. The same trick generalizes: */10 gives every 10 minutes, */15 every quarter hour.
How do I run a job every day at 9am?
0 9 * * *. The first field is the minute (0, so exactly on the hour), the second is the hour in 24-hour time (9 means 9:00 am), and the remaining three stars mean every day of the month, every month, every weekday. For 9:30 use 30 9 * * *, and for both 9am and 5pm give a list: 0 9,17 * * *. Remember the tool shows next runs in your browser's timezone — servers often run UTC, so a 9am meant for Amsterdam needs the server's local hour instead.
How do I run a cron only on weekdays?
Put the days in the fifth field: 0 9 * * 1-5 runs at 9am Monday through Friday. Days are numbered 0-7, where both 0 and 7 mean Sunday, so 1-5 is the standard work week. Need Monday, Wednesday and Friday only? Use a list: 0 9 * * 1,3,5. The weekday field combines with the hour fields freely — 30 8 * * 1-5 is 8:30am on working days.
How do I run a job on the first day of the month?
0 0 1 * * — midnight as the month rolls over to the 1st. The day-of-month field is the third one, and the trailing stars leave month and weekday unrestricted. For 6am on the 1st instead, shift the hour: 0 6 1 * *. Keep the day-of-week field as * here: if you also restricted it, classic cron would fire on the 1st OR that weekday, doubling your schedule.
Can cron run a job every 30 seconds?
Not in classic 5-field cron — its finest grain is one minute. What you can do here is switch to the 6-field form with a leading seconds column: */30 * * * * * fires every 30 seconds, and 15,45 * * * * * fires at :15 and :45 past each minute. Support is the catch: standard vixie cron on Linux accepts only five fields, so the 6-field form works in job runners built for it (many schedulers and queue systems are), not in a bare crontab.