Home › Developer Tools › Cron Expression Generator

Cron Expression Generator

Click together a cron schedule or paste an existing one. The generator explains it in plain English, checks every field and lists the next run times in your local time zone or UTC.

Builder

Next run times

    Advertisement
    Advertisement

    How to use the Cron Expression Generator

    1. Start from a preset or type an expression such as */15 9-17 * * 1-5 into the box.
    2. Fine-tune each field with the builder tabs: every unit, every N units, specific values or a range.
    3. Read the plain-English line to confirm the schedule means what you intend.
    4. Check the next run times. Switch between local time and UTC, or choose a different start date, then press Calculate Next Runs.
    5. Copy the expression (or the full crontab line) into your crontab, CI pipeline or scheduler.

    Cron syntax at a glance

    ┌───────────── minute (0–59)
    │ ┌─────────── hour (0–23)
    │ │ ┌───────── day of month (1–31)
    │ │ │ ┌─────── month (1–12 or JAN–DEC)
    │ │ │ │ ┌───── day of week (0–6 or SUN–SAT, 7 = Sunday)
    │ │ │ │ │
    * * * * *  command to run
    SymbolMeaningExampleMatches
    *Every value* in hour0, 1, 2 … 23
    ,List1,15 in day of monththe 1st and the 15th
    -Range (inclusive)1-5 in day of weekMonday to Friday
    /Step*/15 in minute0, 15, 30, 45
    a-b/nStep within a range9-17/2 in hour9, 11, 13, 15, 17
    a/nStep from a to the end5/20 in minute5, 25, 45

    Common cron schedules

    ExpressionRuns
    */5 * * * *Every 5 minutes
    0 * * * *At the start of every hour
    0 */6 * * *At 00:00, 06:00, 12:00 and 18:00
    0 0 * * *Every day at midnight (same as @daily)
    30 8 * * 1-508:30 Monday to Friday
    */15 9-17 * * 1-5Every 15 minutes from 09:00 to 17:45 on weekdays
    0 3 * * 0Sundays at 03:00
    0 0 1 * *Midnight on the 1st of every month (@monthly)
    0 0 1 1,4,7,10 *Quarterly: 1 January, April, July and October
    0 0 29 2 *Only on 29 February: once every leap year

    The day-of-month and day-of-week rule

    When both day fields are restricted, cron runs on days that match either of them. When either field starts with *, a day has to match both. Worked examples, starting from Thursday 1 January 2026:

    ExpressionLogicFirst runs
    0 9 1,15 * MONday 1 or 15 or MondayJan 1, Jan 5, Jan 12, Jan 15, Jan 19, Jan 26, Feb 1 … at 09:00
    0 9 * * MONevery day and Monday = MondaysJan 5, Jan 12, Jan 19 … at 09:00
    0 9 */2 * MONodd days and Monday (field starts with *)Jan 5, Jan 19, Feb 9 … at 09:00
    0 9 13 * FRIthe 13th or any Friday (not just Friday the 13th)Jan 2, Jan 9, Jan 13, Jan 16 … at 09:00

    To run only on, say, the first Monday of the month, schedule 0 9 1-7 * * and check the weekday inside the command, for example [ "$(date +\%u)" = 1 ] && /path/to/job. In a crontab file, % must be escaped as \%.

    Time zones and daylight saving time

    System cron daemons use the server's local time zone (or CRON_TZ / TZ where supported); Kubernetes CronJobs default to the controller's time zone unless spec.timeZone is set; GitHub Actions schedules always run in UTC. When clocks spring forward, local times inside the skipped hour do not exist and the next-run list leaves them out; when clocks fall back, a repeated hour is shown once. Use UTC for jobs that must run at exact intervals all year.

    Frequently asked questions

    What are the five fields of a cron expression?

    In order: minute (0–59), hour (0–23), day of month (1–31), month (1–12 or JAN–DEC) and day of week (0–6 or SUN–SAT, where 7 also means Sunday). A * means every value, so * * * * * runs every minute.

    What happens when both day of month and day of week are set?

    Standard cron runs the job when EITHER matches. 0 9 1 * MON runs at 09:00 on the 1st of every month and on every Monday. The OR rule only applies when both fields are restricted: if one of them starts with *, both must match. The next-run list follows these rules exactly.

    How do I run a cron job every 5 minutes?

    Use */5 * * * *. The step value after the slash repeats from the start of the range, so it runs at minutes 0, 5, 10 … 55 of every hour. 5-59/10 would run at 5, 15, 25, 35, 45 and 55.

    Which time zone does cron use?

    Classic cron uses the server's local time zone. Many cloud schedulers and CI systems, such as GitHub Actions, use UTC. Switch the next-run list to UTC to see when such a job will really fire. During daylight-saving changes, local times that do not exist are skipped.

    Does this support seconds or Quartz syntax?

    This tool covers the standard 5-field Unix cron format used by crontab, Kubernetes CronJobs and most CI systems. Quartz and Spring add a seconds field and special characters like L, W and #, which are reported as unsupported.

    What do @daily, @weekly and the other macros mean?

    @yearly (or @annually) = 0 0 1 1 *, @monthly = 0 0 1 * *, @weekly = 0 0 * * 0, @daily (or @midnight) = 0 0 * * * and @hourly = 0 * * * *. @reboot runs once at startup and has no schedule.

    Is anything sent to a server?

    No. Parsing, the English description and the run-time calculation all happen in your browser.

    Related tools