What is a Cron Expression?
Cron is a time-based scheduling system used in Unix-like operating systems. A cron expression is a compact string that defines when a scheduled task should run — for example, every day at midnight, every 15 minutes, or on the first Monday of each month.
Cron expressions are used in server automation, CI/CD pipelines, cloud functions, database backups, and many scheduled task systems. The syntax uses five (or six) space-separated fields representing minute, hour, day of month, month, and day of week. While powerful, the format can be hard to read and easy to misconfigure.
What Does This Tool Do?
This tool parses a cron expression and describes what it means in plain language. Enter an expression and instantly see a human-readable explanation of when it will trigger — no guessing, no searching through documentation.
How to Use This Tool
- Type or paste a cron expression into the input field.
- The plain-language description appears immediately.
- The next few scheduled run times may also be shown.
Cron Expression Format
┌─────────── minute (0–59)
│ ┌───────── hour (0–23)
│ │ ┌─────── day of month (1–31)
│ │ │ ┌───── month (1–12)
│ │ │ │ ┌─── day of week (0–6, Sunday=0)
│ │ │ │ │
* * * * *
Special characters: * (any), , (list), - (range), / (step).
Common Use Cases
- Understanding inherited schedules: Decode an existing cron expression in a codebase or config file you didn’t write.
- Verifying your expression: Confirm that a newly written expression triggers at exactly the times you intend.
- Learning cron syntax: See how different patterns translate into natural language.
- Debugging scheduling issues: Understand why a job is running more or less often than expected.
Ready-to-Use Cron Recipes
| Expression | Meaning |
|---|---|
0 0 * * * | Every day at midnight |
0 9 * * 1-5 | Weekdays at 9:00 |
*/15 * * * * | Every 15 minutes |
0 */6 * * * | Every 6 hours, on the hour |
30 3 * * 0 | Sundays at 3:30 |
0 0 1 * * | First day of every month at midnight |
0 0 1 1 * | Once a year — January 1st at midnight |
0 8-18 * * 1-5 | Every hour from 8:00 to 18:00, weekdays |
0 0 * * 6,0 | Weekends at midnight |
5 4 * * mon | Mondays at 4:05 (names work too) |
Common shorthand macros supported by most cron implementations: @hourly, @daily, @weekly, @monthly, @yearly, and @reboot (run once at startup).
The Day-of-Month vs Day-of-Week Trap
The most misunderstood cron behavior: when both the day-of-month and day-of-week fields are restricted, the job runs when either matches — not both. So 0 0 13 * 5 doesn’t mean “Friday the 13th”; it means “every 13th of the month and every Friday.” To run only on Friday the 13th, you need a day-of-week check inside the job itself. This OR-semantics quirk has surprised sysadmins for decades.
Timezone Matters
Cron expressions have no timezone of their own — they fire according to the clock of the system running the scheduler. A 0 9 * * * job on a UTC server runs at 06:00 in São Paulo. Cloud schedulers differ: AWS EventBridge uses UTC by default, GitHub Actions uses UTC always, and Kubernetes CronJobs use the cluster’s timezone unless timeZone is set. When a job “runs at the wrong time,” the timezone is almost always the culprit — also check for daylight-saving transitions, where a 02:30 job may be skipped or run twice.
Frequently Asked Questions
What's the difference between 5-field and 6-field cron?
Standard Unix cron uses 5 fields (no seconds). Some systems like AWS EventBridge and many job schedulers add a 6th field for seconds or year. This tool handles standard 5-field expressions.
What does */15 mean?
The / character means “every N units.” So */15 in the minute field means “every 15 minutes,” and */2 in the hour field means “every 2 hours.”
Is my data private?
Yes. All parsing runs locally in your browser.
Can cron run a job every 30 seconds?
Not directly — standard cron’s smallest unit is one minute. Common workarounds: schedule the job every minute and have it run twice with a sleep 30 between, or use a scheduler with seconds support (Quartz, systemd timers, or a 6-field cron variant).
Why didn't my job run at the expected time?
The usual suspects, in order: the scheduler’s timezone differs from yours (see above), the machine was off or asleep at the scheduled time (standard cron doesn’t run missed jobs), the expression means something different than intended (paste it here to verify), or the job ran but failed silently — check the logs before blaming the schedule.