Run a Cron Job Every Hour
Cron expression to run a job every hour at the top of the hour. Uses 0 in the minute field.
Field-by-Field Breakdown
| Field | Value | Meaning |
|---|---|---|
| Minute | 0 | 0 |
| Hour | * | every hour |
| Day of Month | * | every day of month |
| Month | * | every month |
| Day of Week | * | every day of week |
0 * * * * is the classic hourly cron — 24 runs a day, always at minute 00. The hourly cadence is where 'recurring background work' starts feeling like a real batch job rather than near-real-time polling: enough time per slot to do meaningful work, few enough runs that the execution history stays browsable, and a tick frequency that aligns with most observability and billing windows.
When teams reach for this schedule
OAuth and partner-token refresh
Most partner integrations (Stripe Connect, Google service accounts, Microsoft Graph) issue tokens that expire in 60 minutes. An `0 * * * *` refresh that runs ~5 minutes before expiry — or rotates on a fixed schedule — keeps the token cache warm without ever serving an expired credential.
Hourly snapshot to object storage
Many compliance regimes (SOC 2, HIPAA, PCI DSS) require evidence of regular backups. Dumping incremental state to S3/R2 every hour gives you a 1-hour RPO without the write amplification of streaming replication.
Aggregating analytics events into rollup tables
Raw event tables are expensive to query at scale. Rolling up the last 60 minutes into a `metrics_hourly` table once per hour keeps dashboards fast and the OLTP path clean. Use the hour as the partition key.
What to watch for
- •The most common cron typo:
* * * * *instead of0 * * * *. The first runs 60 times as often. Always double-check the minute field on hourly jobs. - •DST transitions: in spring-forward zones, the local 2 AM hour is skipped; in fall-back, it repeats. Stick to UTC for your schedule and convert to local for display, or use a scheduler that handles DST explicitly.
- •Hourly is a great default — if you don't yet know what cadence you need, start here and downshift only when you have data showing you need it.
- •
@hourlyis supported by most cron implementations as a shortcut for0 * * * *. Some managed schedulers don't parse it though, so the explicit form is safer for portability.
Next 5 Scheduled Runs
Computed in UTC. Use the generator to compare UTC with your browser-local time.
- 1Wed, Jun 3, 2026, 08:00 PM
- 2Wed, Jun 3, 2026, 09:00 PM
- 3Wed, Jun 3, 2026, 10:00 PM
- 4Wed, Jun 3, 2026, 11:00 PM
- 5Thu, Jun 4, 2026, 12:00 AM
Schedule this with TrigRun
Deploy this cron schedule in seconds. Automatic retries, encrypted secrets, full execution history, and native MCP support for AI agents.
Start Scheduling — Free0 * * * *
Frequently Asked Questions
What is the cron expression for every hour?
0 * * * * runs once every hour at minute 0 — i.e., at 1:00, 2:00, 3:00, and so on.
What is the difference between 0 * * * * and * * * * *?
0 * * * * runs once per hour (at minute 0). * * * * * runs every minute — 60 times per hour.
Can I run a job at a fixed offset from the hour?
Yes — replace the minute field with the offset. 15 * * * * runs at 00:15, 01:15, 02:15, and so on. Offsets are useful for spreading load away from the top-of-hour rush.