Launch Workspace
Standard Cron · 5 fields · Hourly

Cron Every Hour — 0 * * * *

Fires at the top of every hour: 00:00, 01:00, 02:00 … 23:00. Exactly 24 executions per day.

Dialect:
5 fields
Plain EnglishHourly

Every hour, on the hour

Runs every hour, on the hour. Evaluated according to STANDARD cron specifications.

Popular Presets:

How 0 * * * * works

In the five-field cron format, the first field is the minute (0–59). Setting it to 0 pins the execution to the exact start of every hour. The second field (hour) is *, which matches all 24 hours. The remaining three * fields match all days, months, and weekdays. The result is 24 runs per day, one at the start of each clock hour.

Hourly cron jobs are the standard choice for: scheduled reports (hourly traffic summary, error rate digest), cache warming (refreshing a CDN or in-memory cache with pre-computed data), log archival (rotating the current hour's log file), and external API polling where 60-minute data lag is acceptable.

Linux's built-in /etc/cron.hourly/

On Debian/Ubuntu/RedHat systems, you can place executable scripts directly into /etc/cron.hourly/ without writing a crontab entry. The system's cron.d configuration runs run-parts /etc/cron.hourly at the top of every hour. This is managed by the anacron or crond daemon and is equivalent to an explicit 0 * * * * crontab entry.

Platform Examples for 0 * * * *

Ready-to-use snippets for all major platforms and schedulers.

Linux / Crontab5-field POSIX cron
# /etc/cron.d/my-schedule
MAILTO="admin@example.com"
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# Runs every hour at minute 0
0 * * * * www-data /usr/local/bin/my-script.sh >> /var/log/my-script.log 2>&1
Kubernetesbatch/v1 CronJob manifest
apiVersion: batch/v1
kind: CronJob
metadata:
  name: my-scheduled-job
  labels:
    app: my-scheduled-job
spec:
  schedule: "0 * * * *"
  timeZone: "UTC"          # requires Kubernetes v1.27+
  concurrencyPolicy: Forbid
  successfulJobsHistoryLimit: 3
  failedJobsHistoryLimit: 1
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: job
            image: alpine:latest
            command:
            - /bin/sh
            - -c
            - echo "Job executed at $(date)"
          restartPolicy: OnFailure
GitHub Actionsworkflow schedule trigger (UTC only)
name: Scheduled Workflow

on:
  schedule:
    # Runs every hour at minute 0 — evaluated strictly in UTC
    - cron: "0 * * * *"
  workflow_dispatch: # allow manual trigger

jobs:
  run-job:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Run task
        run: echo "Workflow triggered at $(date)"
Spring Boot@Scheduled — 6-field cron with seconds
@Component
public class ScheduledTask {

    private static final Logger log = LoggerFactory.getLogger(ScheduledTask.class);

    // Runs every hour at minute 0
    // Spring uses 6-field cron: sec min hr dom mon dow
    @Scheduled(cron = "0 0 * * * *", zone = "UTC")
    public void runTask() {
        log.info("Scheduled job started at: {}", LocalDateTime.now());
        // your business logic here
    }
}

Common Variations

Related expressions for similar scheduling needs.

ExpressionDescription
0 * * * *Every hour at minute 0 (top of the hour)
30 * * * *Every hour at minute 30 (half-hour mark)
15 * * * *Every hour at minute 15
0 9-17 * * 1-5Every hour during business hours (9–5, Mon–Fri)
0 */2 * * *Every 2 hours on the hour
0 */6 * * *Every 6 hours (00:00, 06:00, 12:00, 18:00)

Frequently Asked Questions

Everything you need to know about Cron expressions, syntax rules, and platform nuances.

What is the cron expression for every hour?

The cron expression "0 * * * *" runs at the top of every hour (at minute 0). For example: 00:00, 01:00, 02:00 … 23:00. It fires 24 times per day.

What is the difference between "0 * * * *" and "* * * * *"?

"0 * * * *" fires once per hour at minute 0 (24 times per day). "* * * * *" fires every single minute (1,440 times per day). The first field is the minute field — "0" pins execution to the top of the hour, while "*" matches every minute.

How do I run a cron job every hour in Linux?

Run "crontab -e" and add: "0 * * * * /path/to/script.sh". Linux systems also ship a built-in /etc/cron.hourly/ directory — scripts placed there will be executed every hour via run-parts without needing explicit crontab entries.

What is the Spring Boot cron for every hour?

@Scheduled(cron = "0 0 * * * *", zone = "UTC") fires at second 0, minute 0 of every hour — the 6-field Spring equivalent of "0 * * * *". Do not confuse "0 * * * *" (hourly in 5-field standard) with "0 0 * * * *" (hourly in 6-field Spring).

Does */1 * * * * mean every hour?

No. "*/1 * * * *" means every minute — the */1 step on the minute field is equivalent to "*". For every hour, you need "0 * * * *" (minute field set to 0, hour field as wildcard). A common mistake is placing the step value on the wrong field.