Skip to content
Cron Cookbook

Run a job every hour

The cron expression for every hour is 0 * * * *. The 0 in the minute field fires at minute zero of every hour, 24 times a day. Leaving the minute as * would run it every minute instead.

crontab syntax · 5 fields
0****

Next 5 runs

Vercel always runs schedules in UTC, and GitHub Actions does unless you set a time zone. Crontab and Kubernetes use the server's time zone.

Field by field

0Minute
At minute 0
*Hour
Every hour, 0 to 23
*Day of month
Every day of the month
*Month
Every month
*Day of week
Every day of the week

By platform

Most schedulers take the same five fields. The wrapper, time zone and limits differ.

crontab -e
# m h  dom mon dow   command
0 * * * * /usr/local/bin/sync.sh >> /var/log/sync.log 2>&1

Runs in the server's local time zone

Cron starts jobs with a minimal environment: use absolute paths, and send output to a log so failures don't disappear.

Other hourly schedules

Change the minute to move the run off the top of the hour, or narrow the hour and weekday fields.

ExpressionRuns
30 * * * *Every hour at :30
0 9-17 * * *Every hour from 09:00 through 17:00
0 * * * 1-5Every hour, on the hour, Monday through Friday
@hourlySame as 0 * * * * in crontab and Kubernetes CronJobs; other schedulers need the five fields