Dexaloop Tools

Cron expression generator

Build a cron schedule, read it in plain English and see the next run times. Nothing you type leaves your browser.

Five fields: minute, hour, day of month, month, day of week. Special strings like @daily work too.

*Minute0 to 59
*Hour0 to 23
*Day of month1 to 31
*Month1 to 12 or jan to dec
*Day of week0 to 7 or sun to sat
Presets
Or build oneChanging these writes the expression above.
Repeat
Show run times in
In plain English
Every 5 minutes.

Next 10 runs

    Run times are worked out in your browser from your device's clock and time zone. Standard 5-field crontab, as in the crontab(5) manual. Quartz, AWS and other schedulers use different rules.

    How to use the cron expression generator

    1. Type or paste an expression, such as */5 * * * *, or pick a preset. Only the five schedule fields go in the box, not the command that follows them in a crontab line.
    2. Or build one: choose Daily, Weekly or Monthly and a time, and the expression is written for you.
    3. Read the result: a plain-English description and the next 10 run times. Choose UTC to see the times as a server set to UTC would run them.

    Each of the five fields is shown under the box, and a field with a mistake is marked in red with a message that says what is wrong.

    Cron syntax: the five fields

    A standard crontab schedule has five fields separated by spaces. The ranges below are the ones in the crontab(5) manual page:

    FieldAllowed valuesExample
    Minute0 to 5930
    Hour0 to 239-17
    Day of month1 to 311,15
    Month1 to 12, or jan to decjan-mar
    Day of week0 to 7, or sun to satmon-fri

    In the day of week field, "0 or 7 is Sunday". Within any field:

    • * means every value. The manual says it "always stands for 'first-last'".
    • 1-5 is an inclusive range, and 1,15,30 is a list. Lists can contain ranges.
    • /n after a range or * takes every nth value: */15 in the minute field is 0, 15, 30 and 45; 5-59/15 is 5, 20, 35 and 50.
    • Month and day names use their first three letters, in any case. cronie's manual says "Ranges and lists of names are allowed", so mon-fri works.

    The shortcuts @hourly, @daily, @weekly, @monthly and @yearly (or @annually) stand for 0 * * * *, 0 0 * * *, 0 0 * * 0, 0 0 1 * * and 0 0 1 1 *. @reboot runs once when cron starts, so it has no run times to list.

    Common cron expressions

    ExpressionRuns
    * * * * *Every minute
    */5 * * * *Every 5 minutes, at :00, :05, :10 and so on
    */15 * * * *Every 15 minutes
    0 * * * *Every hour, on the hour
    0 */2 * * *Every 2 hours, from midnight
    30 9 * * *Every day at 09:30
    0 9 * * 1-5Weekdays at 09:00
    */10 9-17 * * 1-5Every 10 minutes from 09:00 to 17:59 on weekdays
    0 0 1 * *Midnight on the 1st of every month
    0 0 1 1,4,7,10 *Midnight at the start of each quarter

    A step restarts at the start of each hour, day or month. */7 in the minute field runs at 0, 7, 14 and so on up to 56, then again at 0, so the last gap of each hour is 4 minutes, not 7.

    Day of month and day of week together

    This is the rule that surprises people most. The crontab(5) manual says:

    "If both fields are restricted (i.e., do not contain the "*" character), the command will be run when either field matches the current time."crontab(5), cronie, on man7.org

    Its own example: 30 4 1,15 * 5 runs "at 4:30 am on the 1st and 15th of each month, plus every Friday". The POSIX standard says the same: "any day matching either" the day of the month or the day of the week is matched.

    So 0 0 1-7 * 1 does not mean "the first Monday of the month". It runs on each of the 1st to the 7th, and on every Monday. The calculator follows this rule, and the run list shows it straight away.

    If either field contains *, both must match instead. 0 0 */2 * 1 runs only on Mondays that fall on an odd-numbered day (1, 3, 5 and so on), because */2 contains a star. In October 2026 that is the 5th and the 19th.

    How the run times are worked out

    The next 10 run times are found in your browser, starting from the next whole minute after now, using your device's clock and time zone (shown above the list). A cron daemon checks the times in a crontab against the clock of the machine it runs on, so check that machine's time zone setting, which may be UTC rather than yours. cronie also lets a crontab set CRON_TZ, which "specifies the time zone specific for the cron table".

    Clock changes: cronie's manual says that with CRON_TZ set, "Non-existent times, such as the 'missing hours' during the daylight savings time conversion, will never match", and that "times that occur more than once (again, during the daylight savings time conversion) will cause matching jobs to be run twice." This page leaves a missing time out of the list and shows a repeated time once, so on the night the clocks go back a job in that hour may run once more than the list shows. Other cron programs, and cron running in the server's own time zone, can handle these hours differently, so avoid scheduling important jobs in them.

    The search looks up to 30 years ahead, which is enough for 0 0 29 2 * (every leap day). An expression that can never match, such as 30 February, is reported as never running.

    Quartz, AWS and GitHub Actions

    This tool reads standard five-field crontab. Other schedulers use similar but different syntax, so check their own documentation:

    • Quartz (Java) starts with a seconds field and allows an optional year, and its docs say you "must currently use the '?' character" in either the day-of-month or the day-of-week field.
    • Amazon EventBridge scheduled rules have "six required fields", ending with a year, and you "can't specify the Day-of-month and Day-of-week fields in the same cron expression". Its examples are in UTC.
    • GitHub Actions uses POSIX cron syntax in schedule, and "By default, scheduled workflows run in UTC." Its shortest interval is "once every 5 minutes". Use the UTC option here to check a workflow's times.

    Pasting a six or seven-field Quartz or AWS expression here gives an error saying so, rather than a wrong reading.

    Questions and answers

    How do I run a cron job every 5 minutes?

    Use */5 * * * *. It runs at minute 0, 5, 10 and so on of every hour. For every 5 minutes during working hours on weekdays, use */5 9-17 * * 1-5.

    Why did my job run on a day I did not expect?

    If you set both the day of month and the day of week, standard cron runs the job when either one matches, not only when both do. 0 0 1-7 * 1 runs on the 1st to the 7th and on every Monday. To run on the first Monday only, run on Mondays and have the script check that the date is the 7th or earlier.

    Is Sunday 0 or 7?

    Both. The crontab(5) manual lists the day of week as 0 to 7, where 0 or 7 is Sunday. You can also write sun.

    Can cron run a job every 30 seconds?

    Not with standard crontab. The smallest field is the minute, and cron checks its entries once a minute. Quartz has a seconds field, but that is a different syntax.

    What time zone are the run times in?

    The list uses your device's time zone, named above it, or UTC if you choose it. The server that runs the job uses its own clock and time zone, which may be different.

    Is anything I type sent anywhere?

    No. The expression is read and the run times are worked out by code running in this page. Nothing is sent or stored.

    Sources

    Checked on 7 October 2026. If a rule has changed, please tell us.