Cron Expression Builder Visual Builder, Explainer & Next Run Preview — All Platforms
Build cron expressions visually with field-by-field controls and one-click presets, or paste an existing expression to get a plain-English explanation of every field. Supports 5-field standard cron and 6-field expressions with seconds (Quartz, Spring, node-cron). Generates ready-to-paste code snippets for Linux crontab, GitHub Actions workflows, Kubernetes CronJobs, AWS EventBridge, node-cron and Spring @Scheduled. Shows the next 10 scheduled run times with relative timestamps. 40+ presets organised by category. Free, browser-side, no account.
Build, Parse & Understand Cron Expressions
Visual builder with quick buttons + presets, or paste any expression to decode it instantly. All calculations run in your browser.
Paste any cron expression in the field above. The breakdown below explains each field in plain English. The Field breakdown section shows what values each field matches.
*Wildcard — matches every valid value in this field*/NStep — every Nth value (*/5 in minutes = :00, :05, :10...)N-MRange — from N to M inclusive (1-5 in dow = Mon-Fri)N,MList — specific values (1,3,5 = Mon, Wed, Fri)N-M/SRange with step — every S within N to MJAN FEB MAR APR MAY JUN
JUL AUG SEP OCT NOV DEC
SUN MON TUE WED THU FRI SAT
Times shown in your browser's local timezone.
Cron syntax quick reference
*Every value/Step (*/5 = every 5)-Range (1-5),List (1,3,5)* * * * *Every minute*/5 * * * *Every 5 minutes0 * * * *Every hour0 0 * * *Daily midnight0 9 * * 1-5Weekdays 9 AMRate this tool
Cron & Cron Expressions — The Complete Beginner Guide
Cron is a time-based job scheduler built into Unix and Linux operating systems. It runs continuously in the background, checking a configuration file called the crontab (cron table) every minute and executing any commands whose schedule matches the current time. The name comes from the Greek word for time: chronos. Cron has been part of Unix since the 1970s and remains the foundation of scheduled automation in modern systems, cloud platforms, CI/CD pipelines and application frameworks.
The anatomy of a cron expression
A cron expression is a string of 5 space-separated fields that defines a recurring schedule. Reading left to right, each field narrows when the job runs:
| Position | Field | Range | Special values | Example |
|---|---|---|---|---|
| 1 | Minute | 0–59 | * / - , | 30 = at minute 30; */15 = every 15 minutes |
| 2 | Hour | 0–23 | * / - , | 9 = 9 AM; 0 = midnight; */6 = every 6 hours |
| 3 | Day of month | 1–31 | * / - , | 1 = 1st; 15 = 15th; */2 = every 2nd day |
| 4 | Month | 1–12 or JAN–DEC | * / - , | 1 = January; 6 = June; 1,7 = Jan and Jul |
| 5 | Day of week | 0–6 or SUN–SAT | * / - , | 0 or 7 = Sunday; 1 = Monday; 1-5 = Mon-Fri |
The four syntax operators
** * * * * runs every minute of every hour of every day. * 9 * * * runs every minute of 9 AM daily. An asterisk in the month field means every month. Wildcards are the most common character in cron expressions./*/5 in the minute field means every 5 minutes (0, 5, 10, 15...59). */2 in the hour field means every 2 hours (0, 2, 4...22). 0-30/5 means every 5 minutes between minute 0 and minute 30. Steps are the most powerful cron operator for interval-based scheduling.-1-5 in the day-of-week field means Monday through Friday. 9-17 in the hour field means 9 AM through 5 PM. 6-8 in the month field means June, July and August. Ranges can be combined with step: 0-30/10 means minutes 0, 10, 20 and 30.,1,3,5 in the day-of-week field means Monday, Wednesday and Friday. 0,12 in the hour field means midnight and noon. 1,4,7,10 in the month field means January, April, July and October (quarterly). Lists can contain ranges: 1-3,6 means 1, 2, 3 and 6.Cron Expression Examples — Complete Reference Table
These are the most commonly used cron expressions in production systems. Click any expression in the builder above to load it instantly.
| Expression | Meaning | Use case |
|---|---|---|
| * * * * * | Every minute | High-frequency polling, health checks |
| */5 * * * * | Every 5 minutes | Cache refresh, metric collection |
| */15 * * * * | Every 15 minutes | API polling, sync jobs |
| 0 * * * * | Every hour at :00 | Hourly digest, queue drain |
| 0 */6 * * * | Every 6 hours | Report generation |
| 0 0 * * * | Daily at midnight | Database backup, log rotation |
| 0 9 * * * | Daily at 9 AM | Morning digest email |
| 0 9 * * 1-5 | Weekdays at 9 AM | Business day automation |
| */10 9-17 * * 1-5 | Every 10m during business hours | Working-hours monitoring |
| 0 0 * * 0 | Weekly: Sunday midnight | Weekly reports, cleanups |
| 0 8 * * 1 | Every Monday 8 AM | Weekly digest, sprint kickoff |
| 0 0 1 * * | 1st of every month | Monthly invoice, billing |
| 0 0 1 1 * | Annual: Jan 1 midnight | Year-end reset, annual audit |
| 0 9 1 1,4,7,10 * | Quarterly: 1st at 9 AM | Quarterly report generation |
| 0 2 * * * | Daily 2 AM | Off-peak backup window |
| 0 0,12 * * * | Midnight and noon | Twice-daily sync |
| 30 9 * * 1-5 | Weekdays at 9:30 AM | Daily standup reminder |
| 0 17 * * 5 | Friday 5 PM | End-of-week notification |
Cron on Every Platform — Linux, GitHub Actions, Kubernetes, AWS, Node.js & Spring
The core cron expression syntax is the same across platforms, but each has specific wrapping syntax, timezone behaviour, and field count differences.
crontab -e. Format: MINUTE HOUR DOM MONTH DOW command. System crontabs in /etc/cron.d/ also allow a username field. Special shortcuts: @hourly, @daily, @weekly, @monthly, @reboot (runs once on boot). Timezone is always the server’s local timezone. Test with: run-parts --test /etc/cron.hourlyon.schedule.cron key in your workflow YAML. GitHub Actions runs cron schedules in UTC. The minimum interval is every 5 minutes (*/5) — GitHub rejects expressions that would run more frequently. During high load, scheduled runs may be delayed by up to an hour. Scheduled workflows only run on the default branch. Use ${{ github.event.schedule }} to access the schedule string inside the job.spec.schedule field accepts standard 5-field cron expressions. Kubernetes uses UTC unless you configure a timezone in the cluster. Key fields: concurrencyPolicy: Forbid prevents overlapping runs; startingDeadlineSeconds handles missed schedules; successfulJobsHistoryLimit and failedJobsHistoryLimit control history. Jobs older than the deadline are not started. Kubernetes 1.27+ supports timezone-aware CronJobs using the spec.timeZone field.cron(): cron(MINUTE HOUR DOM MONTH DOW YEAR). The year field is optional but commonly used. AWS does not support the ? shortcut for “no specific value” differently — use * for unspecified fields. EventBridge runs in UTC. Example for daily at 9 AM UTC: cron(0 9 * * ? *)node-cron npm package supports an optional seconds field as the first field, making it 6-field when seconds are needed. Standard 5-field expressions also work. Usage: cron.schedule(‘*/5 * * * *’, handler). Pass { timezone: ‘America/New_York’ } as the third argument for timezone-aware scheduling. Use cron.validate(‘* * * * *’) to validate an expression before scheduling.@Scheduled(cron = “...”) and the Quartz scheduler use a 6-field format where the first field is seconds (0–59). Example: @Scheduled(cron = “0 */5 * * * *”) runs every 5 minutes at second 0. Quartz also supports L (last), W (nearest weekday) and # (Nth weekday of month) special characters not available in standard cron. Spring Boot auto-configures scheduling when @EnableScheduling is on the configuration class.6-Field Cron Expressions — Adding Seconds for Sub-Minute Scheduling
Standard Linux cron runs at most once per minute. For sub-minute scheduling, various platforms extend cron with a seconds field.
| Expression | Platform | Meaning |
|---|---|---|
| 0/5 * * * * * | Quartz / Spring | Every 5 seconds |
| 0 * * * * * | Quartz / Spring | Every minute (at second 0) |
| 0 0 * * * * | Quartz / Spring | Every hour at minute 0, second 0 |
| */30 * * * * * | node-cron | Every 30 seconds |
| */10 * * * * * | node-cron | Every 10 seconds |
| cron(0 0 * * ? *) | AWS EventBridge | Daily at midnight UTC |
| cron(*/5 * * * ? *) | AWS EventBridge | Every 5 minutes |
Cron Expression Gotchas & How to Avoid Them
*), most cron implementations use OR logic: the job runs if either condition matches. 0 0 1 * 1 runs on the 1st of every month OR every Monday — not only on Mondays that fall on the 1st. This surprises many developers. If you need AND logic, use scripting inside the cron command to check the date.* * * * * sleep 15 && cmd; sleep 15 && cmd; sleep 15 && cmd0 2 * * * may skip or run twice when clocks change. Solutions: set the server to UTC and handle timezone conversion in the application; on modern systems, use the CRON_TZ environment variable in your crontab; on Kubernetes 1.27+, use the spec.timeZone field./usr/bin/python3 not python3. Redirect output: append >> /var/log/cron.log 2>&1 to capture both stdout and stderr. Set needed variables at the top of the crontab file./N applied to a range starts from the range start, not 0. 5-59/10 means 5, 15, 25, 35, 45, 55 — not 0, 10, 20... When applied to *, step always starts from the field’s minimum (0 for minutes). So */10 means 0, 10, 20, 30, 40, 50, but 5-59/10 means 5, 15, 25, 35, 45, 55.LazyTools vs Other Crontab Guru Tools
| Feature | LazyTools | crontab.guru | cronguru.com | DevToolbox |
|---|---|---|---|---|
| Visual builder (click fields) | ✅ Yes + quick buttons | ❌ Input only | ❌ Input only | ✅ Yes |
| Plain-English explainer | ✅ Field-by-field | ✅ Summary only | ✅ Summary only | ✅ Summary only |
| Next run times | ✅ Next 10 + relative | ✅ Yes | ✅ Yes (5) | ✅ Yes |
| 6-field (seconds) support | ✅ Toggle included | ❌ 5-field only | ❌ 5-field only | ❌ 5-field only |
| Platform code snippets | ✅ 6 platforms | ❌ None | ❌ None | ❌ None |
| Presets library | ✅ 40+ categorised | ⚠ Examples page | ❌ Random only | ⚠ Basic presets |
| Validation with error messages | ✅ Field-level errors | ⚠ Basic | ⚠ Basic | ✅ Yes |
| No account required | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes |
Cron Expression FAQ
A string of 5 space-separated fields (minute, hour, day-of-month, month, day-of-week) defining when a scheduled task runs. Wildcards (*), steps (/), ranges (-) and lists (,) can be used in any field. 6-field expressions add a seconds field at the start (Quartz, Spring, node-cron). Paste any expression in the input above to decode it.
Read left to right: minute, hour, day-of-month, month, day-of-week. An asterisk (*) means "every". A slash (/) means "every N". A dash (-) is a range. A comma (,) is a list. Example: */15 9-17 * * 1-5 = every 15 minutes during hours 9 through 17 on Monday through Friday.
*/5 * * * * — runs at :00, :05, :10, :15, :20, :25, :30, :35, :40, :45, :50, :55 every hour. For every 5 minutes during business hours: */5 9-17 * * 1-5
0 0 * * * — minute 0, hour 0 (midnight), every day. For noon: 0 12 * * *. Remember cron uses server local time unless configured otherwise.
Use 1-5 in the 5th field (day-of-week). 0 9 * * 1-5 runs every weekday at 9 AM. For every 30 minutes on weekdays during business hours: */30 9-17 * * 1-5
0 * * * * — at minute 0 of every hour. For every 2 hours: 0 */2 * * *. For every 6 hours: 0 */6 * * *. For every hour between 9 AM and 5 PM: 0 9-17 * * *
Use on.schedule.cron in your workflow YAML. Example: on:
schedule:
- cron: '0 9 * * 1-5'. GitHub Actions cron is UTC only. Minimum interval: every 5 minutes. May delay during high load. Runs only on default branch.
A crontab guru is an online cron expression editor. LazyTools is an enhanced crontab guru alternative with visual builder, field-by-field breakdown, next 10 run times, platform snippets for 6 platforms, and 40+ presets.
*/30 * * * * — runs at :00 and :30 of every hour. For every 30 minutes during business hours: */30 9-17 * * 1-5. For exactly :15 and :45: 15,45 * * * *
An asterisk (*) means "every valid value" in that field. In minute: every minute. In hour: every hour. In day-of-month: every day. * * * * * runs every minute of every day.
Standard 5-field Linux cron cannot run more frequently than once per minute. For sub-minute scheduling, use a 6-field scheduler: Quartz (Java), Spring @Scheduled, node-cron, or AWS EventBridge. Toggle the "Include seconds" option above to use 6-field format in this tool.
Paste any expression in the input above. The tool validates each field against allowed ranges, shows error messages for invalid values, and displays the next 10 run times as confirmation. You can also use cron.validate(expr) in node-cron or the cron library's validate method in your programming language.
0 0 1 * * — midnight on the 1st of every month. For noon: 0 12 1 * *. For 9 AM on 1st of each quarter: 0 9 1 1,4,7,10 *
0 0 * * 1 — midnight every Monday. For 9 AM: 0 9 * * 1. For Mon and Fri: 0 9 * * 1,5. Note: standard cron uses 0=Sunday, 1=Monday, 6=Saturday.
Create a CronJob resource. The spec.schedule field takes a standard 5-field cron expression in UTC. Use concurrencyPolicy: Forbid to prevent overlapping runs. Kubernetes 1.27+ supports spec.timeZone for timezone-aware scheduling.
*/15 * * * * — runs at :00, :15, :30, :45. For every 15 minutes starting at minute 5: 5,20,35,50 * * * *. For every 15 minutes during business hours on weekdays: */15 9-17 * * 1-5