SuperDevTools

Cron expression generator and explainer

In plain English

    FieldInputMatching values
    Presets:

    Generator

    Pick a tab and adjust it: the expression at the top updates right away.

    Next runs

      Daylight saving time: dates follow the local time of the chosen zone, as classic cron does. A time that does not exist (02:30 in New York on March 8, 2026) runs a fixed-time job right after the jump, at 03:00; a job whose minute or hour starts with * skips those times. A repeated time in autumn runs a fixed-time job once, but a job whose minute or hour starts with * twice.

      Shortcuts and variants

      ShortcutEquivalent
      @yearly, @annually0 0 1 1 *
      @monthly0 0 1 * *
      @weekly0 0 * * 0
      @daily, @midnight0 0 * * *
      @hourly0 * * * *
      @rebootonce, at startup

      Everything is computed in your browser: no expression is sent anywhere.

      Build a cron schedule, or decode one

      Every crontab line starts with five fields that say when a command runs. 30 3 * * 1-5 reads “At 03:30, Monday through Friday”. This tool works both ways: paste an expression into “Cron expression” and read it under “In plain English”, or put one together with the “Generator”. “Next runs” lists the following 10 dates in any time zone, such as America/New_York.

      How to use it

      1. Type or paste the expression. Mistakes are reported per field, for example “Minute: 60 is out of the allowed range (0 to 59).”
      2. Or pick a generator tab (“Minutes”, “Hourly”, “Daily”, “Weekly”, “Day of month”, “Months”): the expression updates as you change the settings.
      3. Check the dates, then use “Copy expression”, or “Copy link” to share the whole setup, time zone included.

      The five fields

      PositionFieldAllowed values
      1Minute0 to 59
      2Hour0 to 23
      3Day of month1 to 31
      4Month1 to 12 or JAN to DEC
      5Day of week0 to 7 (0 and 7 are Sunday) or SUN to SAT

      Special characters: * means every value, a comma builds a list (1,15), a hyphen a range (9-17) and a slash a step: */15 gives 0, 15, 30 and 45, and 5-20/5 gives 5, 10, 15 and 20.

      Cron schedule examples

      • */15 * * * *: every 15 minutes, 96 runs a day.
      • 0 0 1 * *: at 00:00 on day 1 of the month, handy for a monthly report.
      • 0 17 * * 5: at 17:00 every Friday, the classic end-of-week export.
      • 0 2 * * 0 and 0 2 * * 7: identical, at 02:00 on Sunday.

      The OR rule between day of month and day of week

      When both day fields are restricted, classic cron runs the job when either one matches. So 0 12 13 * 5 does not mean “Friday the 13th”: it runs on the 13th of every month and also every Friday. Counting from November 14, 2026, that gives Friday November 20 and 27, then December 4, 11 and Sunday December 13. A field that starts with *, such as */2, counts as unrestricted, and the rule becomes an AND again.

      Time zones and daylight saving time

      Cron follows the machine's local clock. A server set to UTC fires 0 14 * * * at 9:00 in New York during winter and at 10:00 in summer. On March 8, 2026, 02:30 does not exist in New York: a fixed-time job such as 30 2 * * * runs right after the jump, at 03:00, and the list flags it. On November 1, 2026, 01:30 happens twice: a fixed-time job runs once, while a job with * in its minute or hour field runs in both passes.

      Variants between schedulers

      Some tools add a seconds field at the front (6 fields) or a year at the end (7 fields): tick “Seconds as first field”. Many accept shortcuts such as @daily (0 0 * * *) or @reboot (at startup). L (last), W (nearest weekday), # (nth weekday, MON#2 for the second Monday) and ? are not standard: tick “Interpret L, W, # and ?” to read them. Watch out as well for schedulers that number days from 1 (Sunday) to 7, or apply AND instead of OR.

      Good habits

      • Avoid the top of the hour, and midnight above all: everyone schedules there. 17 3 * * * spreads the load better than 0 0 * * *.
      • Log the output: append >> /var/log/backup.log 2>&1 to the command so failures leave a trace.

      Frequently asked questions

      How do I run a job every 5 minutes?

      Use */5 * * * *. It runs at :00, :05, :10 and so on up to :55, which is 288 times a day.

      Why does my job skip some months?

      With 0 0 31 * *, months with 30 days and February are simply skipped, so the job runs 7 times a year. For the last day of every month you need a scheduler that understands L.

      Why is my 6-field expression rejected?

      Classic cron reads only 5 fields. If your scheduler puts seconds first, tick “Seconds as first field”: the tool then accepts 6 or 7 fields.

      Is my expression sent anywhere?

      No, everything is computed in your browser. The share link only holds the expression, the time zone and the options.