Cron Expression Generator

Create a cron expression by picking minutes, hours, days and months, or paste one to get a plain-English explanation, clear error messages and the next ten times it will run in your time zone.

100% freeNo sign-upRuns in your browserWorks on mobile
minutehourday of monthmonthday of week
Shortcuts such as @daily and @hourly are understood too.
Presets

Build it field by field

Minute*
Hour*
Day of month*
Month*
Day of week*

Next 10 run times

    How to use the Cron Expression Generator

    1. Type or paste a cron expression into the box, or start from one of the presets such as Weekdays at 9:00.
    2. Read the plain-English description to confirm the schedule means what you intend.
    3. Adjust any field in the builder: choose Every, pick Specific values, set a Range or a Step (every n units). The expression updates as you click.
    4. Check the next 10 run times, in your own time zone or in UTC to match your server.
    5. Copy the expression into your crontab, CI pipeline or scheduler.

    Features

    • Visual builder for all five cron fields
    • Plain-English description of any standard expression
    • Next 10 run times in your time zone or UTC
    • Accepts names (MON, JAN), lists, ranges, steps and @ shortcuts
    • Specific errors for out-of-range values, bad steps and 6-field Quartz syntax
    • Handles the day-of-month OR day-of-week rule the way cron does

    The five fields of a cron expression

    Cron is the time-based job scheduler on Linux and other Unix-like systems, and its five-field syntax is also used by GitHub Actions, Kubernetes CronJobs, cloud schedulers and many job libraries. Each line in a crontab starts with five fields separated by spaces, followed by the command to run:

    FieldAllowed valuesNames
    Minute0–59–
    Hour0–23–
    Day of month1–31–
    Month1–12JAN–DEC
    Day of week0–7 (0 and 7 are Sunday)SUN–SAT

    Special characters

    • * means every value: * in the hour field means every hour.
    • , separates a list: 1,15 in the day-of-month field means the 1st and the 15th.
    • - defines a range: 1-5 in the day-of-week field means Monday through Friday.
    • / sets a step: */10 in the minute field means every ten minutes, and 9-17/2 in the hour field means 9, 11, 13, 15 and 17.

    Most cron implementations also accept shortcuts: @hourly, @daily (or @midnight), @weekly, @monthly, @yearly (or @annually) and @reboot, which runs once when the cron service starts.

    Worked examples

    ExpressionMeaning
    */5 * * * *Every five minutes
    0 * * * *At the start of every hour
    30 2 * * *Every day at 02:30
    0 9 * * 1-5At 09:00 on weekdays
    0 0 1 * *At midnight on the first day of each month
    15 14 1 */3 *At 14:15 on the 1st of January, April, July and October
    0 22 * * 0Every Sunday at 22:00

    The day-of-month and day-of-week trap

    When both day fields are restricted, standard cron runs the job when either one matches, not when both do. 0 0 13 * 5 therefore runs on every 13th of the month and on every Friday, not only on Friday the 13th. If either field starts with *, only the other one counts. This tool follows the same rule when it lists run times, and the description says “or” when both fields apply.

    Time zones and daylight saving

    Cron uses the time zone of the machine or service running it, and many servers and hosted schedulers run in UTC. GitHub Actions, for example, evaluates schedules in UTC by default. Switch the run-time list to UTC to see exactly when such a job fires. Jobs scheduled between 01:00 and 03:00 local time deserve care: when clocks spring forward that hour is skipped, and when they fall back it happens twice, and different cron implementations handle those cases differently.

    Common mistakes

    • Writing * 9 * * * for “daily at 9”. That runs every minute from 9:00 to 9:59. Use 0 9 * * *.
    • Pasting a 6-field Quartz expression. Quartz, Spring and some cloud tools add a seconds field and support extras such as ?, L and #. Classic crontab does not.
    • Assuming */7 means every seven days across months. Steps restart at the start of each range, so */7 in the day field gives the 1st, 8th, 15th, 22nd and 29th, then starts again on the 1st.
    • Forgetting the environment. Cron runs commands with a minimal PATH and no interactive shell, so use absolute paths in your command.

    Frequently asked questions

    What does */5 mean in cron?

    It is a step value: start at the lowest allowed value and repeat every 5. In the minute field it means minutes 0, 5, 10 and so on, so the job runs every five minutes.

    How do I run a cron job every weekday?

    Use 1-5 in the day-of-week field, for example 0 9 * * 1-5 for 9:00 every Monday through Friday.

    Does cron use my local time or UTC?

    Cron uses the time zone of the system or service that runs it. Many servers and cloud schedulers run in UTC, so check the setting and compare with the UTC run-time list here.

    Why does my expression with 6 fields show an error?

    Standard crontab has five fields. Six-field expressions come from Quartz, Spring or similar tools, which add a seconds field at the start. Remove the seconds to use it with cron.

    Can cron run a job every 30 seconds?

    Not directly, because the smallest unit is one minute. A common workaround is two entries for the same minute, one of which sleeps for 30 seconds before running the command.

    More developer tools

    Other free tools you might need next.

    View all 24