DEVESSENTIALS

* * * * * — What does this cron expression mean?

* * * * * means “match every value in every field”, so the cron daemon starts the job at the beginning of every minute. It is great for testing whether cron works at all and for lightweight queue pollers. As a production schedule it deserves a second look, because 1,440 runs a day amplifies every small cost: process start-up, log lines, emails, database connections.

In plain English

* * * * *

Run the job every minute of every hour of every day, the most frequent schedule standard cron allows.

Frequency: 60 runs per hour, 1,440 per day. cronstrue reads it as “Every minute”.

Open * * * * * in the Cron Builder

Field-by-field breakdown

*

Minute

0–59

*

Hour

0–23

*

Day of month

1–31

*

Month

1–12

*

Day of week

0–6

  • Minute* — every minute, 0 through 59. */1 means exactly the same thing.
  • Hour* — every hour.
  • Day of month* — every day of the month.
  • Month* — every month.
  • Day of week* — every day of the week.

Next run times

Example: next 5 runs

Example: if it is Monday, 5 Jan 2026, 09:07 UTC, the next runs of * * * * * (UTC) are:

  1. #1Mon, 5 Jan 2026, 09:08 UTC
  2. #2Mon, 5 Jan 2026, 09:09 UTC
  3. #3Mon, 5 Jan 2026, 09:10 UTC
  4. #4Mon, 5 Jan 2026, 09:11 UTC
  5. #5Mon, 5 Jan 2026, 09:12 UTC

Live times from your current clock replace this example once the page loads. Cron uses the scheduler's timezone; most cloud servers, GitHub Actions and AWS EventBridge rules use UTC.

* * * * * in Quartz, AWS, GitHub Actions, Kubernetes and systemd

Crontab (Linux / macOS)

* * * * * /usr/local/bin/job.sh >> /var/log/job.log 2>&1

Standard 5-field syntax used by Vixie cron, cronie, busybox crond and most libraries (node-cron, APScheduler, robfig/cron).

Quartz (6 and 7 fields)

0 * * * * ?
0 * * * * ? *

# Spring @Scheduled
@Scheduled(cron = "0 * * * * *")

In 6-field schedulers keep the leading 0. * * * * * ? in Quartz (or * * * * * * in Spring) means every second, 60 times more often.

AWS EventBridge

cron(* * * * ? *)

# interval alternative
rate(1 minute)

One minute is EventBridge's finest granularity. Use the singular rate(1 minute).

GitHub Actions

on:
  schedule:
    # Every minute, evaluated in UTC
    - cron: '* * * * *'

Not possible: GitHub Actions' shortest schedule interval is 5 minutes. A * * * * * workflow schedule effectively runs every 5 minutes at best.

Kubernetes CronJob

apiVersion: batch/v1
kind: CronJob
metadata:
  name: every-minute
spec:
  schedule: "* * * * *"
  timeZone: "Etc/UTC"
  concurrencyPolicy: Forbid
  startingDeadlineSeconds: 30
  jobTemplate:
    spec:
      template:
        spec:
          restartPolicy: OnFailure
          containers:
            - name: job
              image: alpine:3.20
              command: ["/bin/sh", "-c", "echo running"]

Each run creates a Pod, so 1,440 Pods a day. Keep successfulJobsHistoryLimit low and consider a long-running Deployment with an in-process loop instead.

systemd timer

# /etc/systemd/system/myjob.timer
[Unit]
Description=Every minute

[Timer]
OnCalendar=minutely
Persistent=true

[Install]
WantedBy=timers.target

minutely means *-*-* *:*:00. The default AccuracySec=1min allows systemd to delay the timer by up to a minute, so set AccuracySec=1s if timing matters.

When to use every minute

  • Checking that cron itself works: * * * * * date >> /tmp/cron-test.log.
  • Draining a small outbound email or webhook queue.
  • Watchdog scripts that restart a process if its PID file is stale.
  • Short-term debugging before switching to the real schedule.

Common pitfalls with * * * * *

Runs overlap as soon as one takes longer than 60 seconds

Cron starts a new copy every minute regardless of whether the previous one has finished. One slow database query can trigger a cascade of parallel copies that make each other slower. Use flock -n to skip a run while the previous one is still going.

* * * * * flock -n /tmp/queue.lock /usr/local/bin/drain-queue.sh

Mail and log volume

Any output from a cron job is emailed to the crontab owner by default. At 1,440 runs a day a single warning line fills a mailbox, and redirected logs grow by over 40,000 lines a month. Set MAILTO="" or redirect to a rotated log file deliberately.

MAILTO=""
* * * * * /usr/local/bin/poll.sh >> /var/log/poll.log 2>&1

Cron cannot go below one minute

There is no seconds field in standard cron, so “every 30 seconds” needs a workaround such as two entries, one delayed with sleep 30. For anything faster or more precise, use systemd timers (OnUnitActiveSec=30s), a Quartz/Spring scheduler or a long-running worker.

* * * * * /usr/local/bin/tick.sh
* * * * * sleep 30; /usr/local/bin/tick.sh

Related cron expressions

Need a different schedule? Paste * * * * * into the Cron Builder and edit it, browse all cron expressions, read the cron syntax guide or copy from the cron examples list.

Frequently Asked Questions

What does * * * * * mean in cron?▾

Every minute. Each * matches all possible values for its field (minute, hour, day-of-month, month, day-of-week), so the job runs at the start of every minute, 1,440 times a day.

Is */1 * * * * the same as * * * * *?▾

Yes. */1 means every value with a step of 1, which is every minute, exactly like *. The shorter * form is more common.

Can I schedule a GitHub Actions workflow every minute?▾

No. GitHub Actions only supports schedules down to once every 5 minutes, and even those are best-effort. For per-minute work, use a cron daemon on a server, a cloud scheduler such as EventBridge (rate(1 minute)) or a long-running process.