Skip to content

Every minute cron: what * * * * * means and when it is too often

Runs in your browser — nothing you paste leaves this page. How we prove that

Cron Expression Tester playground

Example

Five fields — minute, hour, day of month, month, day of week. Macros like @daily are supported too.

Results update as you type — press Enter to run now.

Timezone
fig. 04 — cron-expression-tester · scheduling Valid
Result

Every minute.

Minute*
Hour*
Day of month*
Month*
Day of week*
Next runs
  • Computed in your browser, in your timezone.

`* * * * *` fires once at the start of every minute, all day, every day. The engine reads it as: Every minute.

Reading * * * * * field by field

A standard cron line has five fields in a fixed order: minute, hour, day of month, month and day of week. A bare asterisk means every allowed value of that field, so five asterisks match every minute of every hour of every day. There is no seconds field in classic cron, which makes one minute the shortest interval a crontab can express.

The parser on this page agrees: Every minute. The next run times in the panel above are computed in your browser, in your own timezone, so they are not printed in this text.

A crontab line and the overlap problem

A typical entry looks like * * * * * /usr/local/bin/poll-queue.sh >> /var/log/poll-queue.log 2>&1. Cron starts the command with a minimal environment, usually a short PATH and no shell profile, so use absolute paths and redirect output, otherwise cron tries to mail it to the owner.

The real risk at this frequency is overlap. Cron does not wait for the previous run to finish; if one run takes 70 seconds, two copies are alive at the same time, and a slow day can pile up dozens. Wrap the command in a lock: * * * * * flock -n /run/lock/poll-queue.lock /usr/local/bin/poll-queue.sh makes a second copy exit immediately instead of queueing behind the first.

systemd, Kubernetes and GitHub Actions

The systemd timer equivalent is OnCalendar=minutely (the same as *-*-* *:*:00). Timers never start a second instance of a running service, which removes the overlap problem without flock, and AccuracySec=1s stops systemd from coalescing the start time.

In a Kubernetes CronJob, schedule: "* * * * *" creates a new Job and Pod every minute; set concurrencyPolicy: Forbid so a slow run is skipped rather than doubled, and remember that Pod start-up latency eats into a 60-second budget. GitHub Actions accepts the expression but runs scheduled workflows at most every 5 minutes, and only in UTC.

When every minute is the wrong answer

Every-minute jobs are usually polling something that could push an event instead: a queue, a webhook, a file watcher. If the job only needs to react within a few minutes, every 5 minutes cuts the load fivefold; if it runs continuously anyway, a long-running service with its own loop is easier to monitor than 1,440 short processes a day.

FAQ

Questions, answered.

Tap a question to expand the answer.

Not with one line, because classic cron has no seconds field. The common workaround is two entries, one plain and one prefixed with sleep 30, or a systemd timer with OnCalendar=*:*:0/30, which does support seconds.

Cron wakes up once a minute and starts every matching job close to the top of the minute, but there is no guarantee of the exact second. Several jobs scheduled for the same minute all start together.

More free, private DevOps tools.

The Cron Expression Tester is one tool in OpsCanopy — a growing canopy of browser-based validators, converters and testers that never touch a server.

New to Linux?  Read the Linux guide →

42 free tools, every one offline-capable — opscanopy.com works with no signup and nothing uploaded.

Scheduling on Linux? Pair this with the Cron to systemd Converter, or browse the full tools directory.

Not affiliated with or endorsed by any cron implementation. Format names are used only to describe what this tool reads. OpsCanopy is free and open.