PublicSoftTools
Tools7 min read

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

  1. Open the Cron Expression Generator.
  2. Click a preset to start from a common schedule (every minute, every hour, weekdays at 9am, etc.).
  3. Adjust individual fields — Minute, Hour, Day of Month, Month, Day of Week — using the text inputs.
  4. Read the plain-English description below the fields to confirm the schedule matches your intent.
  5. Paste the expression directly into your crontab, CI pipeline, or cloud scheduler.

Cron Field Syntax Reference

Value typeSyntaxExampleMeaning
Wildcard** * * * *Every minute of every day
Specific valuen0 9 * * *At 9:00 AM every day
Step*/n*/15 * * * *Every 15 minutes
Rangen-m0 9-17 * * 1-5Every hour 9 AM–5 PM on weekdays
Lista,b,c0 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.sh

Cron 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 weekdays

AWS 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 format

Kubernetes 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