A cron expression is a compact string that tells a scheduler when to run a task. It originated in Unix cron and is now used by virtually every job scheduling system — from Linux crontab to cloud-based services like Recuro.
A standard cron expression has five fields separated by spaces. Each field controls a different unit of time.
| Position | Field | Allowed values |
|---|---|---|
| 1 | Minute | 0 – 59 |
| 2 | Hour | 0 – 23 |
| 3 | Day of month | 1 – 31 |
| 4 | Month | 1 – 12 |
| 5 | Day of week | 0 – 6 (Sunday = 0) |
Reading left to right: 30 9 * * 1 means "minute 30, hour 9, any day of month, any month, Monday." In plain English: every Monday at 9:30 AM.
| Character | Meaning | Example |
|---|---|---|
* | Every possible value | * * * * * — every minute |
, | List of values | 0 9,17 * * * — 9 AM and 5 PM |
- | Range of values | 0 9-17 * * * — every hour from 9 AM to 5 PM |
/ | Step interval | */15 * * * * — every 15 minutes |
| Expression | Meaning |
|---|---|
* * * * * | Every minute |
*/5 * * * * | Every 5 minutes |
0 * * * * | Every hour, on the hour |
0 */2 * * * | Every 2 hours |
30 * * * * | Every hour at minute 30 |
0 0 * * * | Every day at midnight |
0 9 * * * | Every day at 9:00 AM |
0 9 * * 1-5 | Weekdays at 9:00 AM |
0 0 * * 0 | Every Sunday at midnight |
0 0 1 * * | First day of every month at midnight |
0 0 1 1 * | January 1st at midnight (yearly) |
0 6,18 * * * | 6 AM and 6 PM every day |
0 0 * * 1 | Every Monday at midnight |
*/10 * * * * | Every 10 minutes |
0 0 15 * * | 15th of every month at midnight |
0 8-17 * * 1-5 | Every hour during business hours, weekdays |
5 0 * * * | Every day at 12:05 AM |
0 22 * * 5 | Every Friday at 10 PM |
Many schedulers also accept shorthand expressions:
| Shorthand | Equivalent |
|---|---|
@yearly | 0 0 1 1 * |
@monthly | 0 0 1 * * |
@weekly | 0 0 * * 0 |
@daily | 0 0 * * * |
@hourly | 0 * * * * |
@reboot | Run once at startup |
* with 0. 0 * * * * runs once per hour (at minute 0). * * * * * runs every minute. The difference is 60x more executions.*), most cron implementations run the job when either condition matches — not both. This trips up nearly everyone.*/1 instead of *. They're equivalent, but * is cleaner and universally understood.*/5 in cron?
The / is a step operator. */5 in the minute field means "every 5th minute" — so 0, 5, 10, 15, 20, and so on through 55. The full expression */5 * * * * runs a job every five minutes.
Use */30 * * * *. This fires at minute 0 and minute 30 of every hour. Alternatively, 0,30 * * * * does the same thing explicitly.
0 * * * * and * * * * *? 0 * * * * runs once per hour at the top of the hour. * * * * * runs every single minute — 60 times per hour. Always double-check which one you mean.
Cron expressions are the foundation of recurring background jobs. Unlike delayed jobs that run once at a future time, cron runs on a fixed repeating schedule. Need to build one? Try our free cron expression generator, or paste an existing expression into the cron expression explainer to translate it to plain English.
Recuro handles cron scheduling, retries, alerts, and execution logs -- so you can focus on building your product.
No credit card required