Toolminex
Developer Tools

Cron Expression Generator

Build cron job schedules visually. Get the cron expression, a human-readable description, and the next 5 run times, instantly in your browser.

Runs in browserFree & no signup

Cron Expression

* * * * *

every minute, every hour, every day of month, every month, every day of week

Common Presets

Paste Expression

Visual Builder

Minute

*

Hour

*

Day of Month

*

Month

*

Day of Week

*

Next 5 Run Times

  1. 1Sat, Oct 31, 08:35 AM
  2. 2Sat, Oct 31, 08:36 AM
  3. 3Sat, Oct 31, 08:37 AM
  4. 4Sat, Oct 31, 08:38 AM
  5. 5Sat, Oct 31, 08:39 AM

How to build a cron expression

Pick a preset or set each field, read the plain-English description, and check the next run times.

  1. 01

    Start from a preset if one is close

    Ten presets cover the common cases, from every minute to the 1st of every month. Pick the nearest and adjust it.

  2. 02

    Set each field in the builder

    Minute, hour, day of month, month and day of week can each be every value, a specific list, a range or a step such as every 15. The expression and a plain-English description update as you go.

  3. 03

    Or paste an expression to decode it

    Paste one from a crontab or CI config to see what it means. Names like MON and JAN, ranges with steps such as 1-30/5, and mixed lists like 1-5,7 are understood.

  4. 04

    Check the next run times, then copy

    The next five run times are listed so you can confirm the schedule fires when you expect before you deploy it.

The five fields and what they accept

A standard cron expression is five fields separated by spaces, read left to right as minute, hour, day of month, month and day of week. Each field takes *, a single value, a comma-separated list, a range with a hyphen, or a step with a slash.

FieldAllowed valuesExample
Minute0–59*/15 → minutes 0, 15, 30 and 45
Hour0–239-17 → every hour from 9:00 to 17:00
Day of month1–311,15 → the 1st and 15th
Month1–12 or JAN–DEC*/3 → January, April, July, October
Day of week0–6 or SUN–SAT (0 = Sunday)1-5 → Monday to Friday

So 30 2 * * 1-5 means 02:30 on weekdays, and 0 */6 * * * means minute 0 of every sixth hour: 00:00, 06:00, 12:00 and 18:00. A step counts from the start of the range, so */7 in the minute field fires at 0, 7, 14 up to 56, then again at 0, giving a 4-minute gap at the top of each hour.

The day-of-month and day-of-week rule that catches everyone

When both day fields are restricted, standard cron runs on days matching either one, not both. 0 9 1 * 1 fires at 09:00 on the 1st of every month and also every Monday. It doesn't mean "Mondays that fall on the 1st". The next-run list here follows that rule, so it's a quick way to check.

If either day field is *, only the other one matters, which is what most schedules want. To run on the first Monday of the month, standard cron can't express it in one line; the usual trick is 0 9 1-7 * * plus a check inside the script that today is a Monday.

Where cron schedules are used

Nightly backups and clean-up

Run at a quiet hour such as 0 3 * * *, and stagger jobs a few minutes apart so they don't all start at once.

Scheduled CI workflows

GitHub Actions accepts the same five fields in its schedule trigger. Remember it runs in UTC and can start a few minutes late at busy times.

Reports at the start of the week

0 8 * * 1 sends a Monday 08:00 report. Check the server's timezone first, or it may land at 08:00 somewhere else.

Limits worth knowing

  • Five fields only. Quartz and Spring's six- or seven-field formats with seconds and years, and their L, W, # and ? symbols, aren't supported.
  • Day of week runs 0 to 6. Some cron versions also accept 7 for Sunday; here, use 0 or SUN.
  • Next run times are shown in your browser's timezone. Servers and CI systems often run in UTC, so convert before trusting a time.
  • Shortcuts like @daily and @reboot aren't parsed. @daily is the same as 0 0 * * *.

Frequently asked questions

Use */15 * * * *. It fires at minutes 0, 15, 30 and 45 of every hour.
None in the minute field: both mean every 5 minutes from minute 0. A range only changes the result when it doesn't start at the minimum, such as 2-59/5 for minutes 2, 7, 12 and so on.
The usual causes are the server's timezone, a script that relies on environment variables cron doesn't set, or a % character, which crontab treats as a newline unless escaped as \%.
No. The expression is built, parsed and checked in your browser.
Combine a range and a step in the hour field: 0 9-17/2 * * 1-5 runs at 09:00, 11:00, 13:00, 15:00 and 17:00 on weekdays.

For a longer walk-through of every symbol, with worked examples, read Cron syntax explained.

Related developer tools

Something not working right?