⏰ Cron Expression Builder & Explainer

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.

Visual builder + parserNext 10 run times6 platform snippets5 & 6-field support
AdSense — 728×90 Leaderboard
⏰ Cron Expression Builder

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.

💬
Every 5 minutes
Field breakdown
Visual field builder
40+ Presets
Next 10 run times

Times shown in your browser's local timezone.

Platform-specific code
Code snippet

    
AdSense — 728×90 Leaderboard

Cron syntax quick reference

Field Order
5 or 6 fields
Left to right
Field 1Minute (0-59)
Field 2Hour (0-23)
Field 3Day of month (1-31)
Field 4Month (1-12)
Field 5Day of week (0-6)
📖
Syntax Operators
4 operators
Combine freely
*Every value
/Step (*/5 = every 5)
-Range (1-5)
,List (1,3,5)
Common Examples
Quick reference
Copy and adapt
* * * * *Every minute
*/5 * * * *Every 5 minutes
0 * * * *Every hour
0 0 * * *Daily midnight
0 9 * * 1-5Weekdays 9 AM
📦
Platform Notes
6 platforms
Key differences
Linux cron5-field, server time
GitHub Actions5-field, UTC only
AWS EventBridge6-field + year, UTC
node-cronOptional seconds (6-field)
Spring/Quartz6-field (seconds first)
Need a Unix timestamp for your cron schedule?
Use the free Epoch & Unix Timestamp Converter to convert any date to Unix time and back — essential when configuring cron jobs that reference specific start times or log timestamps.
Timestamp Converter →
⭐ Ratings

Rate this tool

4.9
★★★★★
Based on 18,400 ratings
5
10,120
4
435
3
218
2
109
1
0
Was this your schedule photo guide helpful?
Thank you! G'day!
What Is Cron?

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:

PositionFieldRangeSpecial valuesExample
1Minute0–59* / - ,30 = at minute 30; */15 = every 15 minutes
2Hour0–23* / - ,9 = 9 AM; 0 = midnight; */6 = every 6 hours
3Day of month1–31* / - ,1 = 1st; 15 = 15th; */2 = every 2nd day
4Month1–12 or JAN–DEC* / - ,1 = January; 6 = June; 1,7 = Jan and Jul
5Day of week0–6 or SUN–SAT* / - ,0 or 7 = Sunday; 1 = Monday; 1-5 = Mon-Fri

The four syntax operators

*
Wildcard — every valid value — An asterisk in any field means the job runs at every valid value of that field. * * * * * 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.
/
Step — every N values — A forward slash combined with a wildcard or range defines a step (interval). */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.
-
Range — from N to M inclusive — A hyphen defines a contiguous range of values. 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.
,
List — specific discrete values — A comma separates a list of specific values. 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.
Common Expressions

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.

ExpressionMeaningUse case
* * * * *Every minuteHigh-frequency polling, health checks
*/5 * * * *Every 5 minutesCache refresh, metric collection
*/15 * * * *Every 15 minutesAPI polling, sync jobs
0 * * * *Every hour at :00Hourly digest, queue drain
0 */6 * * *Every 6 hoursReport generation
0 0 * * *Daily at midnightDatabase backup, log rotation
0 9 * * *Daily at 9 AMMorning digest email
0 9 * * 1-5Weekdays at 9 AMBusiness day automation
*/10 9-17 * * 1-5Every 10m during business hoursWorking-hours monitoring
0 0 * * 0Weekly: Sunday midnightWeekly reports, cleanups
0 8 * * 1Every Monday 8 AMWeekly digest, sprint kickoff
0 0 1 * *1st of every monthMonthly invoice, billing
0 0 1 1 *Annual: Jan 1 midnightYear-end reset, annual audit
0 9 1 1,4,7,10 *Quarterly: 1st at 9 AMQuarterly report generation
0 2 * * *Daily 2 AMOff-peak backup window
0 0,12 * * *Midnight and noonTwice-daily sync
30 9 * * 1-5Weekdays at 9:30 AMDaily standup reminder
0 17 * * 5Friday 5 PMEnd-of-week notification
Platforms

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.

🐧
Linux crontab — the original, 5-field — Add a cron job to your user crontab with 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.hourly
🐱
GitHub Actions — 5-field, UTC only, 5-minute minimum — Use the on.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.
⎈️
Kubernetes CronJob — 5-field, UTC, concurrency controls — The 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.
🟸
AWS EventBridge — 6-field with optional year, UTC — AWS EventBridge (formerly CloudWatch Events) uses a 6-field format wrapped in 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 — optional 6-field (seconds first), local timezone — The 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.
Spring / Quartz — 6-field (seconds first), application timezone — Spring’s @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

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.

ExpressionPlatformMeaning
0/5 * * * * *Quartz / SpringEvery 5 seconds
0 * * * * *Quartz / SpringEvery minute (at second 0)
0 0 * * * *Quartz / SpringEvery hour at minute 0, second 0
*/30 * * * * *node-cronEvery 30 seconds
*/10 * * * * *node-cronEvery 10 seconds
cron(0 0 * * ? *)AWS EventBridgeDaily at midnight UTC
cron(*/5 * * * ? *)AWS EventBridgeEvery 5 minutes
Common Mistakes

Cron Expression Gotchas & How to Avoid Them

⚠️
Day-of-month AND day-of-week: OR logic, not AND — If you specify both a day-of-month and a day-of-week (neither is *), 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.
⚠️
No seconds in standard 5-field cron — The minimum granularity of standard Linux cron is one minute. If you need sub-minute execution, you cannot use standard cron. Options: use a 6-field scheduler (node-cron, Quartz, Spring); run the command inside a loop from cron; or use a purpose-built scheduler like Celery Beat or APScheduler. A common workaround is running the command four times per minute using: * * * * * sleep 15 && cmd; sleep 15 && cmd; sleep 15 && cmd
⚠️
Timezone assumptions: cron uses server time by default — Standard cron runs in the server’s local timezone, which may not match your intended schedule after daylight saving time changes. A job set to run at 0 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.
⚠️
Missing PATH and environment variables — Cron runs with a minimal environment that lacks the user’s PATH. Commands that work in your shell may fail in cron because binaries are not found. Always use full paths in cron commands: /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.
⚠️
GitHub Actions: scheduled runs may not trigger exactly on time — GitHub has documented that scheduled workflows may be delayed by up to an hour during high system load. Do not rely on GitHub Actions cron for time-critical operations. The minimum interval is every 5 minutes. Scheduled workflows only run on the default branch. If a workflow has not run for 60 days, GitHub may disable the scheduled trigger.
⚠️
Step does not start from 0 for ranges — The step operator /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.
Comparison

LazyTools vs Other Crontab Guru Tools

FeatureLazyToolscrontab.gurucronguru.comDevToolbox
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
FAQ

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

Related tools

More Free Developer Tools