Quick answer
The cron expression for every minute is * * * * *. Five asterisks leave the minute, hour, day of month, month and day of week unrestricted, so the job starts at the beginning of every minute, 60 times an hour and 1,440 times a day. It is the shortest interval classic crontab supports; anything faster needs a seconds field or a long-running process.
- Live next runs
- Any time zone
- Field-by-field breakdown
- Seven platform snippets
- Daylight saving aware
How to use this schedule
- 1Copy
* * * * *with the Copy expression button. - 2Check Next runs in your time zone to confirm it fires when you expect, including around daylight saving changes.
- 3Pick your platform under Use it on your platform and copy the ready-made crontab line, workflow, manifest or timer.
- 4Need a different time or day? Click Customize to open it in the cron expression generator and change any field.
What does * * * * * mean?
Each asterisk means "every value this field allows". The cron daemon wakes once a minute, compares the current time with every entry, and starts whatever matches. With five asterisks, every check matches, so the command starts at the top of every minute.
That makes * * * * * the best way to test a new crontab line. Within 60 seconds you know whether the path, permissions and environment are right. Cron runs commands with a minimal environment (a short PATH, no shell profile), so something that works in your terminal can fail under cron. Use absolute paths and redirect output to a file while you debug:
* * * * * /usr/local/bin/report.sh >> /tmp/report.log 2>&1Once it works, change the schedule to the real one. Forgotten test entries running every minute are a classic source of mystery load.
Should a production job run every minute?
Sometimes. Heartbeats, lightweight metric collection and polling a queue that has no push mechanism are reasonable every-minute jobs. Do the arithmetic first, though: 1,440 runs a day means 1,440 process starts. If each run spends 5 seconds starting an interpreter and loading configuration, that is two hours of CPU a day spent on startup alone.
Signs you have outgrown an every-minute cron job:
- Runs regularly take longer than a minute and start to overlap
- You need reaction times below a minute
- Each run repeats expensive setup work
At that point a long-running worker or a systemd service is usually the better tool. If near-real-time is not essential, every 2 minutes or every 5 minutes halves or fifths the load with no code change.
What does each field in * * * * * mean?
| Field | Value | Allowed | Meaning |
|---|---|---|---|
| Minute | * | 0–59 | every minute |
| Hour | * | 0–23 | every hour |
| Day of month | * | 1–31 | every day of the month |
| Month | * | 1–12, JAN–DEC | every month |
| Day of week | * | 0–7 (0 and 7 are Sunday), SUN–SAT | every day of the week |
Read together: At the start of every minute, every hour of every day.
How do I adjust * * * * * to my own schedule?
Small edits to * * * * * cover most real-world needs:
| Expression | What it does |
|---|---|
* 9-17 * * 1-5 | Every minute from 09:00 to 17:59, Monday to Friday |
* * * * 1-5 | Every minute on weekdays only |
0-29 * * * * | Every minute during the first half of each hour |
*/2 * * * * | Every 2 minutes, half the load |
* * * * * * | Every second, in 6-field syntax (not crontab) |
Need something else? Click Customize at the top of the page to open this schedule in the cron expression generator and change any field.
Related schedules: Every 30 seconds · Every 2 minutes · Every 5 minutes · Every hour
Browse all schedules in the cron schedule library.
How do I run * * * * * in crontab, GitHub Actions, Kubernetes and the cloud?
| Platform | Write it as | Time zone |
|---|---|---|
| Linux crontab | * * * * * | Server's time zone; CRON_TZ= in cronie |
| GitHub Actions | - cron: "* * * * *" | UTC by default; add timezone: (IANA name). Runs at most every 5 minutes |
| Kubernetes CronJob | schedule: "* * * * *" | Set timeZone: (1.27+) |
| Cloudflare Workers | * * * * * | UTC only; numbers weekdays from 1 = Sunday, so use names |
| Vercel Cron Jobs | * * * * * | UTC only; more than once a day needs Pro (Hobby: once a day) |
| AWS EventBridge Scheduler | cron(* * * * ? *) | Takes a time zone; legacy scheduled rules are UTC only |
| systemd timer | OnCalendar=*-*-* *:*:00 | Add a zone after the time, e.g. Europe/London |
In a crontab (crontab -e), the full line looks like this:
* * * * * /path/to/job.sh >> /var/log/job.log 2>&1The live panel at the top of the page builds complete, copy-ready files for each platform (workflow, CronJob manifest, wrangler.toml, vercel.json, AWS CLI and systemd units) and can shift the schedule to UTC for platforms that need it.
What can go wrong with * * * * *?
- If a run takes 70 seconds, the next one has already started. Use
flock -n /tmp/job.lock your-commandso a new run exits while the previous one still holds the lock. - Cron mails the output of every run to the crontab owner. At 1,440 runs a day, redirect it with
>> /var/log/job.log 2>&1or discard it with> /dev/null 2>&1. - GitHub Actions' shortest schedule is every 5 minutes, so
* * * * *won't give you per-minute runs there. - An every-minute line left over from debugging keeps running forever. Search for
* * * * *when you review a crontab. - In a zone with daylight saving time, a schedule with
*in the minute or hour field follows the wall clock: the spring-forward night loses an hour of runs and the fall-back night repeats one. Servers on UTC never see this.
Frequently asked questions
Last updated by the Playxoft engineering team.