tooloora

Cron hourly — 0 * * * * explained

The classic hourly job: minute 0 of every hour, identical to @hourly — and why minute 0 is the busiest minute on any server.

Runs locally — nothing is uploaded

Examples

In plain words

Every hour at minute 0, every day.

Field by field

  • 0Minute

    at minute 0

    Matches: 0

  • *Hour

    every hour

    Matches: 0, 1, 2, 3, 4, 5 … 23

  • *Day of month

    on every day of the month

    Matches: 1, 2, 3, 4, 5, 6 … 31

  • *Month

    in every month

    Matches: Jan, Feb, Mar, Apr, May, Jun … Dec

  • *Day of week

    on every weekday

    Matches: Sun, Mon, Tue, Wed, Thu, Fri, Sat

Next runs

Calculating the next runs …

These times apply in the time zone configured on the server. Cron converts nothing; this preview uses your device clock.

The expression stays in your browser — it is never sent to a server.

Other expressions

0 * * * * runs the job once an hour, at minute 0 of every hour, 24 times a day. The first field pins the minute, the star in the hour field means every hour. The shortcut @hourly expands to exactly this line, so both are interchangeable in any crontab.

Why is minute 0 a bad place to be?

Because everything else is there too. Log rotation, backup agents, monitoring exporters and every other hourly job on the machine fire at the same instant, and a shared database or API sees the whole herd arrive at once. Moving to 17 * * * * costs nothing, spreads the load and often turns a mysterious hourly latency spike into a flat line.

What is the difference between 0 * * * * and @hourly?

Nothing in behaviour: the shortcut is expanded to the same five fields when the crontab is read. The written-out form is preferable in shared files because it can be edited into something else later, and because every reader sees at a glance which minute the job actually uses. @reboot is the only shortcut with no five-field equivalent.

How do I run something every two or three hours?

Put the step in the hour field, not the minute field: 0 */2 * * * runs at 0:00, 2:00, 4:00 and so on. Because 24 is divisible by 2, 3, 4, 6, 8 and 12, those steps stay even across midnight; 0 */5 * * * does not, it jumps from 20:00 straight to the next 0:00.

How to add the expression

  1. Pick a minute that is not 0 — 7, 17 or 23 are good choices on a busy machine.
  2. Add the line, for example 17 * * * * /pfad/zum/skript.sh, and save the crontab.
  3. Make sure the job finishes well within an hour, or add a lock so runs cannot pile up.
  4. Check the explainer above to confirm the schedule reads the way you intended.

Frequently asked questions

Does 0 * * * * run at midnight as well?

Yes. The hour field is a star, so hour 0 is included and the job runs at 0:00 like any other hour. If you want to skip the night, restrict the hours, for example 0 6-22 * * *.

Why did my hourly job run twice in one night?

Almost certainly the daylight saving switch in autumn, when the local clock repeats an hour. A job pinned to a minute rather than a fixed hour is affected once a year; if exactly-once matters, run the server in UTC.

What does * * * * * differ in?

That expression has a star in the minute field too, so it runs every minute — sixty times more often. Writing 0 in the minute field is what turns a per-minute job into an hourly one.

Is anything about my server sent to you?

No. The explainer only sees what you type into the field, and even that stays in your browser. There is no upload, no logging and no account, and the next run times are computed locally from your device clock.