Cron: Every Hour

The expression, what it means, and when it next runs.

Runs entirely in your browser

Loading the tool…

Five fields: minute, hour, day of the month, month, day of the week. Shorthand like @daily works too.

—

What each field means
Next runs your local time

    Add it with crontab -e. Cron runs it with a bare environment, so give every command its full path.

    The expression is 0 * * * *: at minute zero of every hour. The zero is the important character, and * * * * * would be every minute rather than every hour, which is the mistake this schedule invites.

    Every hourly job on a machine written this way fires at the same instant, on the hour, along with everything else scheduled hourly. On a busy server that is a stampede. Moving the minute off zero costs nothing and helps a lot: 17 * * * * runs just as often and shares the hour with far less.

    Many systems also provide @hourly, which means exactly 0 * * * * and is easier to read, though it is a convenience of the cron implementation rather than part of the field syntax and not every one has it.

    Edit any field for a different schedule, or see every five minutes and every day at midnight.

    How to use it

    1. Read the expression above and the plain English underneath it.
    2. Check the next run times, which are worked out from your own clock.
    3. Edit any field to change the schedule, and copy the line when it is right.

    Questions

    What is the cron expression for hourly?

    0 * * * *, meaning minute zero of every hour of every day. Writing * in the minute field instead gives you every minute, sixty times more often than intended, which is the usual way this one goes wrong.

    Should I run hourly jobs on the hour?

    Preferably not. Everything else scheduled hourly fires at minute zero too, so the top of the hour is the busiest moment on the machine. Picking an arbitrary minute, 17 or 43, runs exactly as often and avoids the pile-up entirely.

    Which timezone does cron use?

    The server's, not yours. The next run times here are shown in your local time because that is the clock this page can see, so on a machine set to UTC the real firing times will differ by your offset. It is the single most common reason a job runs at an unexpected hour.

    Where does this line go?

    Into a crontab, edited with crontab -e, one schedule and command per line. The five fields are minute, hour, day of month, month and day of week, and the command follows them on the same line.

    Other schedules

    The same generator on a different expression. Each explains itself and shows when it next fires.

    Your data stays on your device

    Everything above runs inside your browser as WebAssembly compiled from Rust. Nothing you type is uploaded, logged or stored on a server. You can load this page once, go offline, and it still works.

    This page makes no requests at all, to anywhere. That is not a promise in the copy: it is a Content-Security-Policy header your browser enforces, and connect-src on it is none. Open the network tab and watch nothing happen.