Cron Expression Builder

Build, validate, and understand cron expressions visually

What Is a Cron Expression?

A cron expression is a compact scheduling syntax originally created for the Unix cron daemon, the default job scheduler on Linux and macOS. Each expression encodes a repeating point in time — when should this job fire? — using five fields separated by spaces: minute, hour, day of month, month, and day of week. The daemon reads a user’s crontab file and executes the corresponding command whenever the system clock matches the pattern.

Cron expressions have since spread far beyond Unix. Kubernetes CronJobs, AWS EventBridge, GitHub Actions, Jenkins, Airflow, Spring @Scheduled, and Cloudflare Workers Cron Triggers all use the same core syntax (with minor extensions). If you learn the five-field format once, you can schedule jobs across nearly every platform.

How to Use This Cron Expression Builder

  1. Enter an expression directly in the input field — for example 0 9 * * 1-5 — and the tool instantly shows a human-readable description, the next scheduled run times, and a breakdown of each field.
  2. Or use the visual builder — select values for minute, hour, day, month, and weekday using the dropdowns. The expression is assembled and validated as you go.
  3. Read the next-run preview to confirm the schedule matches your intent before pasting it into your crontab, CI config, or orchestrator.

Everything runs client-side. No backend, no signup, no data leaves your machine.

Cron Expression Format

┌───────────── minute (0-59)
│ ┌───────────── hour (0-23)
│ │ ┌───────────── day of month (1-31)
│ │ │ ┌───────────── month (1-12 or JAN-DEC)
│ │ │ │ ┌───────────── day of week (0-7 or SUN-SAT, 0 and 7 = Sunday)
│ │ │ │ │
* * * * *

Each field accepts a single value, a range, a list, a step, or a wildcard — or a combination of these.

Special Characters

CharacterMeaningExampleDescription
*Any value* * * * *Every minute
,List1,15 * * * *At minute 1 and minute 15
-Range9-17 * * * *Every minute from 9:00 through 17:59
/Step*/10 * * * *Every 10 minutes starting at :00
LLast (day)0 0 L * *Last day of the month (non-standard)
WNearest weekday0 0 15W * *Nearest weekday to the 15th (non-standard)
#Nth weekday0 0 * * 5#3Third Friday of the month (non-standard)

The L, W, and # operators are extensions supported by Quartz, Spring, and some cloud schedulers. Standard Unix cron does not recognize them.

Common Cron Expressions

ExpressionDescription
* * * * *Every minute
0 * * * *Every hour at :00
0 0 * * *Daily at midnight
0 0 * * 0Every Sunday at midnight
0 0 1 * *First day of every month at midnight
*/5 * * * *Every 5 minutes
0 9-17 * * 1-5Every hour from 9 AM to 5 PM, weekdays
30 2 * * *Daily at 2:30 AM
0 0 1,15 * *1st and 15th of every month at midnight
0 */6 * * *Every 6 hours (midnight, 6 AM, noon, 6 PM)
0 0 * * 1-5Every weekday at midnight
0 8 * * 1Every Monday at 8 AM

Cron Across Platforms

The five-field format is universal, but platforms extend it in different ways:

Linux / macOS crontab — the original five-field format. Supports @reboot, @hourly, @daily, @weekly, @monthly, and @yearly shorthand aliases. The timezone is the system timezone unless you set TZ= in the crontab.

AWS EventBridge (CloudWatch Events) — uses six fields: minute hour day-of-month month day-of-week year. The year field accepts * or a range like 2026-2028. Also supports rate(5 minutes) syntax for simple intervals.

Kubernetes CronJobs — standard five-field format. The timezone defaults to the kube-controller-manager timezone (usually UTC). Since Kubernetes 1.27 you can set .spec.timeZone explicitly.

GitHub Actions — five-field cron in the schedule trigger. Runs in UTC only — there is no timezone override. Schedules may be delayed under heavy load; they are best-effort, not guaranteed-precise.

Spring / Quartz (Java) — six fields with a seconds column prepended: second minute hour day month weekday. Supports L, W, #, and ? operators for more expressive scheduling.

Common Cron Mistakes and How to Fix Them

Timezone confusion. The single most common cron problem. Your server runs in UTC, you write 0 9 * * * thinking “9 AM my time,” and the job fires at the wrong hour. Always verify the timezone of the cron daemon. On Linux, run timedatectl or check /etc/timezone.

Day-of-month vs. day-of-week conflict. In standard cron, if you set both the day-of-month and day-of-week fields (neither is *), the job fires when either condition is true — it’s an OR, not an AND. 0 0 15 * 5 means “midnight on the 15th OR any Friday,” not “midnight on the 15th if it’s a Friday.” Some platforms (Quartz) use ? in one field to avoid this ambiguity.

Off-by-one in day-of-week. Sunday is 0 (or 7) in standard cron, but some systems use 1 for Monday and 7 for Sunday. Double-check your platform’s documentation if your weekend jobs fire on the wrong day.

Forgetting that */n starts from 0, not from now. */10 in the minute field fires at :00, :10, :20, :30, :40, :50 — not “every 10 minutes starting from when I saved the crontab.” If you add the entry at 9:03, the first run is still at 9:10.

Overlapping runs. If a job takes longer than its interval, cron starts a second instance. Use flock on Linux (flock -n /tmp/myjob.lock command) to prevent overlap, or set concurrency limits in your orchestrator.

Cron Builder vs. Other Tools

  • This tool — zero-signup, instant validation with human-readable output and next-run preview. Privacy-first: nothing leaves your browser. Best for quickly building or debugging a cron expression.
  • crontab.guru — focused expression explainer with a clean UI. Shows a plain-English translation and highlighted next-run dates. No visual builder for constructing expressions.
  • Cron Maker — generates expressions through a form-based UI. Useful if you prefer clicking over typing, but supports fewer platform extensions.
  • Your terminalcrontab -e edits your live crontab directly. Fastest when you already know the syntax, but no validation or preview before saving.

Use this tool when you need to build an expression from scratch or verify one before deploying it.

Frequently Asked Questions

What is a cron expression?

A cron expression is a string of five (or six) space-separated fields that defines a recurring schedule. The standard five fields are: minute (0-59), hour (0-23), day of month (1-31), month (1-12), and day of week (0-7, where both 0 and 7 represent Sunday). Some systems like Quartz and Spring add a seconds field at the beginning for sub-minute precision.

What does */5 * * * * mean?

This cron expression means 'every 5 minutes'. The */5 in the minute field uses the step operator — it starts at 0 and fires every 5th minute (0, 5, 10, 15, ..., 55). The asterisks in the remaining fields mean 'every valid value', so the job runs every 5 minutes of every hour of every day.

What is the difference between 5-field and 6-field cron?

Standard Unix crontab uses 5 fields (minute, hour, day of month, month, day of week). Java-based schedulers like Quartz and Spring add a 6th seconds field at the beginning, and some also support a 7th year field. AWS EventBridge uses 6 fields with a seconds or year column. Always check which format your target platform expects.

How do I run a cron job every weekday at 9 AM?

Use the expression 0 9 * * 1-5. The 0 sets the minute to :00, 9 sets the hour to 9 AM, the two asterisks mean every day of month and every month, and 1-5 restricts the day of week to Monday through Friday.

Why is my cron job running at the wrong time?

The most common cause is a timezone mismatch. Linux cron uses the system timezone (check with timedatectl or cat /etc/timezone). If your server is set to UTC but you scheduled the job thinking in your local time, it will fire at the wrong hour. Set the TZ variable in your crontab or convert your desired time to the server's timezone.

Can I schedule a job to run every 90 seconds with cron?

No. Standard cron's smallest granularity is one minute. To approximate 90-second intervals, you can schedule the job every minute and add a 30-second sleep in alternate runs, or use two cron entries — one at the minute mark and one with a sleep 30 prefix. For true sub-minute scheduling, consider systemd timers with OnUnitActiveSec or a task queue.

Is my data safe when using this cron builder?

Yes. All cron expression parsing and schedule generation runs entirely in your browser using client-side JavaScript. No data is sent to any server. You can verify by opening your browser's Network tab — there are zero outbound requests when you build or edit an expression.