About the Cron Expression Generator
A cron expression schedules a recurring job: every 5 minutes, every Monday at 9am, the first day of each month, or any other pattern. The notation comes from the Unix cron daemon (introduced in 1975) and survives today in Linux servers, Kubernetes CronJobs, GitHub Actions schedules, AWS EventBridge, Vercel cron, Cloudflare cron triggers, and dozens of other schedulers. Despite its age, the syntax remains confusing to write by hand — most people get the day-of-week and day-of-month fields wrong at least once.
This tool lets you build a cron expression visually using dropdowns for each field, shows the resulting expression, and converts it into a plain-English description (and a list of upcoming run times) so you can verify it does what you expect before pasting it into production.
Anatomy of a cron expression
A standard cron expression has five fields separated by spaces: minute (0–59), hour (0–23), day of month (1–31), month (1–12), and day of week (0–6, Sunday=0). Each field can be a single value (5), a range (1–5), a list (1,3,5), a step (*/15), or a wildcard (*). A small example: "0 9 * * 1" runs at 09:00 every Monday.
The day-of-month / day-of-week gotcha
If both day-of-month and day-of-week are specified (not wildcards), cron runs the job when EITHER condition matches, not both. This catches almost everyone the first time. "0 0 15 * 1" runs at midnight on the 15th of every month AND every Monday — not at midnight on Mondays that fall on the 15th. To run on the 15th only if it is a Monday, you have to handle that logic in your job script.
Extended cron syntax
Some schedulers extend standard cron with a seconds field (Quartz, Spring), with an L (last day of month / last weekday), with W (nearest weekday), or with friendly names like @hourly, @daily, @weekly, @monthly, @yearly. This tool generates standard 5-field cron, which works on every scheduler that accepts cron at all.
How to use the Cron Expression Generator
Choose each field
Use the dropdowns to set minute, hour, day-of-month, month, and day-of-week. Leave a field as * to mean "every".
Read the expression and description
The generated expression appears alongside a plain-English sentence, so there is no ambiguity about what it means.
Verify with the next-run preview
A list of upcoming fire times confirms the schedule matches your intent.
Copy into your scheduler
The five-field expression is valid in standard Unix cron, Kubernetes CronJob, AWS EventBridge (with prefix changes), and most CI/CD scheduler systems.
Worked examples
Example 1
Input: */5 * * * *
Result: Every 5 minutes.
A common health-check or polling interval.
Example 2
Input: 0 9 * * 1-5
Result: At 09:00, Monday through Friday.
A typical "workday morning" schedule.
Example 3
Input: 0 0 1 * *
Result: At midnight on the 1st of every month.
A monthly job, often used for billing or rollups.
Real-world use cases
- Scheduling a daily database backup.
- Triggering a cache refresh every 15 minutes.
- Running a weekly report on Monday mornings.
- Cleaning up temporary files every night at 2am when traffic is low.
- Firing a monthly billing job on the 1st of each month.
Tips & common mistakes
- If you need exact "every N seconds" granularity, standard cron cannot do it — its smallest field is the minute. Use a worker loop or a scheduler that supports seconds (Quartz, Cron4j).
- Always test a new cron in a non-production environment first. A misread expression that fires once a minute instead of once a day can be expensive on metered infrastructure.
- Time zone matters. Most schedulers run cron in UTC by default; if your "midnight" expectation is local time, configure the scheduler's time zone explicitly.
- Add some jitter (a random delay of a few seconds) before the actual job if you have many servers all running the same cron. Without jitter they all hammer the same downstream service simultaneously.
Frequently asked questions
What time zone does cron use?
Standard Unix cron uses the system time zone. Cloud schedulers (AWS, GCP, Kubernetes) typically default to UTC. Always check, and prefer UTC for portability.
Can I run a job every 30 seconds?
Not with standard cron. The smallest unit is a minute. Run every minute and sleep half a minute inside the job, or use a scheduler that supports sub-minute intervals.
Does "0 * * * *" run at the top of every hour?
Yes — minute 0, every hour, every day, every month, every weekday. That is the standard "hourly" pattern.
Why are my day-of-month and day-of-week behaving like OR?
Because cron specifies that behaviour by design. If you need AND, filter inside your job.
Related tools
Last updated: June 2026 · All processing happens locally in your browser.