Cron Expression Generator

Five space-separated fields: minute, hour, day of month, month, day of week
0–59, *, */5
0–23, *, */2
1–31, *, */5
1–12, *, */3
0–6 (Sun=0)
Every minute

Next 5 Run Times (UTC)

    Quick Examples

    What is a Cron Expression?

    Cron is a time-based job scheduler built into Unix and Linux systems. It allows you to automate tasks by running scripts or commands at specified intervals. A cron expression is a string made up of five fields separated by spaces: minute, hour, day of month, month, and day of week. Each field defines when the job should fire, and combining them lets you express virtually any schedule — from "every minute" to "the first Monday of every quarter."

    How to Use This Cron Generator

    Fill in any of the five fields (Minute, Hour, Day of Month, Month, Day of Week) using numbers, wildcards (*), ranges (1-5), or step values (*/15). The expression at the top updates in real time, along with a plain-English description and the next five scheduled run times. You can also paste an existing cron expression directly into the top input to parse and inspect it. Use the Quick Examples chips to load common schedules instantly.

    Common Cron Expression Examples

    ExpressionDescription
    * * * * *Every minute
    */5 * * * *Every 5 minutes
    0 * * * *Every hour (on the hour)
    0 12 * * *Daily at noon
    0 0 * * *Daily at midnight
    0 9 * * 1-5Weekdays at 9:00 AM
    0 0 * * 0Every Sunday at midnight
    0 0 1 * *First day of every month at midnight

    The Five Fields Explained

    Every standard cron expression is five space-separated fields, always in the same order. Getting the allowed ranges right prevents most parse errors.

    PositionFieldAllowed valuesSpecial characters
    1Minute0–59* , - /
    2Hour0–23 (24-hour clock)* , - /
    3Day of month1–31* , - /
    4Month1–12 or JAN–DEC* , - /
    5Day of week0–6 or SUN–SAT (0 and 7 both mean Sunday)* , - /

    Operators

    Shorthand Nicknames

    Most cron implementations accept these aliases in place of all five fields. They are more readable, but not universally supported — check your platform before relying on them.

    NicknameEquivalentMeaning
    @yearly / @annually0 0 1 1 *Once a year at midnight, 1 January
    @monthly0 0 1 * *Midnight on the first of the month
    @weekly0 0 * * 0Midnight on Sunday
    @daily / @midnight0 0 * * *Every day at midnight
    @hourly0 * * * *Every hour on the hour
    @rebootOnce at system startup (not time-based)

    Cron Gotchas That Cause Real Outages

    Day-of-month and day-of-week are OR, not AND. This is the single most misunderstood rule in cron. When both field 3 and field 5 are restricted, the job runs when either matches. 0 0 13 * 5 does not mean "Friday the 13th" — it means "every 13th of the month and every Friday." To get Friday the 13th you must check the day inside your script.
    Cron uses the server's timezone. A job set for 02:00 runs at 02:00 local to the machine, so identical crontabs on servers in different regions fire at different moments. Worse, under daylight saving a 02:30 job can be skipped entirely on the spring-forward day and run twice on the fall-back day. Schedule critical jobs in UTC, or outside the 01:00–03:00 window.
    Overlapping runs are not prevented. Cron starts a new process on schedule regardless of whether the previous one finished. A five-minute job on a */1 schedule will pile up until the box runs out of memory. Wrap long jobs in flock to enforce a single instance.
    The cron environment is nearly empty. Cron does not read your .bashrc or .profile, and PATH is typically just /usr/bin:/bin. A script that works interactively fails under cron because a binary is not on the path. Use absolute paths for every command, and set variables explicitly at the top of the crontab.
    An unescaped percent sign truncates the command. In a crontab, % means newline and everything after the first one becomes stdin. A date +%Y-%m-%d in your command silently breaks it. Escape each as \%.

    Where Cron Expressions Are Used

    The five-field syntax has outlived Unix crontabs and now appears across the stack, with small but important dialect differences.

    Running scheduled jobs in production? A cron job that silently stops firing is invisible until someone notices missing data. Dead-man's-switch monitors such as Better Stack alert you when an expected ping does not arrive. These are affiliate links — they cost you nothing and help keep these tools free.

    Frequently Asked Questions

    What does */5 * * * * mean?
    Every five minutes — at :00, :05, :10 and so on through :55. The step applies within each hour, so there is no drift.
    How do I run a job on the last day of the month?
    Standard cron cannot express it, because month lengths vary. Either use 0 0 28-31 * * and have the script exit unless tomorrow is the first, or switch to a scheduler with the L operator such as Quartz.
    Does 0 or 7 mean Sunday?
    Both do, in most implementations. 0 is the portable choice — some parsers reject 7.
    Why does my cron job not run even though the expression is right?
    Almost always the environment rather than the schedule. Check that the script is executable, that every command uses an absolute path, that the crontab ends with a newline (some daemons ignore the final line without one), and read /var/log/syslog for what cron actually attempted.
    Can cron run more often than once a minute?
    No — one minute is the smallest unit. For shorter intervals use a systemd timer with OnUnitActiveSec, or a long-running process with its own internal loop.