Cron Expression Generator — Build & Understand Cron Jobs
The free Cron Expression Generator lets you build and validate cron expressions in your browser. Choose a preset schedule or set each field manually — the tool translates the expression into plain English so you can confirm the schedule before deploying it. No signup required.
What Is a Cron Expression?
A cron expression is a string of five fields that defines a recurring schedule for automated tasks. The name comes from the Unix cron daemon, which reads a file called crontab and executes commands at the times specified by each expression. Cron syntax is now used far beyond Unix — GitHub Actions, AWS EventBridge, Kubernetes CronJobs, Heroku Scheduler, and many CI/CD tools all use it.
┌──── minute (0–59) │ ┌──── hour (0–23) │ │ ┌──── day of month (1–31) │ │ │ ┌──── month (1–12) │ │ │ │ ┌──── day of week (0–6, 0 = Sunday) │ │ │ │ │ * * * * *How to Use the Cron Generator
- Open the Cron Expression Generator.
- Click a preset to start from a common schedule (every minute, every hour, weekdays at 9am, etc.).
- Adjust individual fields — Minute, Hour, Day of Month, Month, Day of Week — using the text inputs.
- Read the plain-English description below the fields to confirm the schedule matches your intent.
- Paste the expression directly into your crontab, CI pipeline, or cloud scheduler.
Cron Field Syntax Reference
| Value type | Syntax | Example | Meaning |
|---|---|---|---|
| Wildcard | * | * * * * * | Every minute of every day |
| Specific value | n | 0 9 * * * | At 9:00 AM every day |
| Step | */n | */15 * * * * | Every 15 minutes |
| Range | n-m | 0 9-17 * * 1-5 | Every hour 9 AM–5 PM on weekdays |
| List | a,b,c | 0 0 1,15 * * | Midnight on the 1st and 15th |
Common Cron Patterns
Every N minutes
Use a step value in the minute field. */5 * * * * runs every 5 minutes.*/30 * * * * runs every 30 minutes (at :00 and :30). Steps always start from 0 — */7 runs at minutes 0, 7, 14, 21, 28, 35, 42, 49, 56, then resets at the next hour.
Specific time each day
0 3 * * * runs at 3:00 AM every day. 30 6 * * * runs at 6:30 AM. The minute field comes first, so the order is minute then hour — not the intuitive HH:MM order.
Weekdays only
0 9 * * 1-5 runs at 9:00 AM Monday through Friday. Day of week uses 0 for Sunday and 6 for Saturday. Some implementations also accept 7 as Sunday.
First of every month
0 0 1 * * runs at midnight on the 1st of every month — useful for monthly reports, billing runs, and database snapshots.
Specific months
0 0 1 1,4,7,10 * runs at midnight on the 1st of January, April, July, and October — a quarterly schedule expressed as a list.
Advanced Scheduling Patterns
Day of month vs day of week interaction
When both day-of-month and day-of-week are non-wildcard, most cron implementations (including Vixie cron on Linux) apply OR logic — the job runs when either condition matches. For example, 0 9 15 * 5 runs at 9 AM on the 15th of every month and also every Friday. If you want AND logic (only the 15th that is a Friday), you need a wrapper script that checks the date at runtime.
Chaining jobs with delays
Cron has no built-in dependency system. If job B must run after job A finishes, use a shell script that calls both commands sequentially, or use a job scheduler like Airflow, Temporal, or GitHub Actions with needs: dependencies.
Preventing overlapping runs
If a cron job takes longer than its interval, two instances can overlap. Wrap your command with flock on Linux to create an exclusive lock:
*/5 * * * * flock -n /tmp/myjob.lock /path/to/script.shCron in Cloud and CI Environments
GitHub Actions
GitHub Actions uses standard five-field cron syntax in the schedule trigger. All scheduled workflows run in UTC. The minimum interval supported is every 5 minutes, though GitHub throttles heavily used scheduled workflows.
on:
schedule:
- cron: '0 9 * * 1-5' # 9 AM UTC on weekdaysAWS EventBridge
AWS EventBridge supports both cron and rate expressions. Its cron syntax has a sixth field for year and uses ? instead of * to indicate "any" for day-of-month or day-of-week (not both):
cron(0 9 ? * MON-FRI *) # EventBridge formatKubernetes CronJob
Kubernetes CronJobs use standard five-field cron syntax. The schedule runs in the timezone of the control plane — use timeZone: "America/New_York" in the spec (Kubernetes 1.27+) to set an explicit timezone.
Timezone Pitfalls
Unix cron runs in the system timezone. Cloud schedulers often default to UTC. This causes off-by-one-hour bugs that are especially painful during daylight saving time transitions — a job scheduled for 2 AM may run at 1 AM or 3 AM depending on the direction of the clock change.
Best practice: run scheduled jobs in UTC and convert to local time in application code. If your platform supports a CRON_TZ or timeZone setting, set it explicitly rather than relying on server defaults.
Common Questions
What is the minimum cron interval?
Standard cron does not support sub-minute intervals — the smallest unit is one minute. For sub-minute scheduling, use a loop within a script, a message queue (SQS, RabbitMQ), or a purpose-built scheduler like Temporal or Sidekiq.
Does cron support seconds?
Standard five-field cron does not. Quartz Scheduler (Java) adds a seconds field as a sixth column at the front. AWS EventBridge does not support seconds. Always check the specific implementation your platform uses.
How do I test a cron expression without waiting?
Use the plain-English description in this tool to verify the schedule visually. For Linux, you can temporarily change the interval to * * * * * (every minute) to confirm the job runs, then restore the production schedule.
Generate Your Cron Expression
Use the visual builder to create and validate cron expressions in seconds — presets, field inputs, and plain-English descriptions included.
Open Cron Generator