Cron Expression Generator

Build a cron schedule one field at a time, or paste an expression to see what it means in plain English. Check the next run times in any time zone, then copy it for crontab, GitHub Actions, or Kubernetes. Everything runs in your browser.

At 09:00, on Monday through Friday

Common schedules

Matches minute 0

Next 10 run times

Working out the run times...

# At 09:00, on Monday through Friday
0 9 * * 1-5 /path/to/command

Run crontab -e and add this line, with your own command in place of /path/to/command. Cron reads the schedule in the server's time zone.

What is a cron expression?

A cron expression is a short line of five fields that tells a scheduler when to run a job. The fields are the minute, hour, day of the month, month, and day of the week, in that order. The name comes from cron, the program that runs scheduled tasks on Linux and other Unix systems.

The same format is used well beyond Linux servers. GitHub Actions, Kubernetes CronJobs, and many hosting platforms read it too. It is compact, but easy to get wrong, which is why this tool writes each expression back as a sentence and lists the times it will run.

Why use our cron expression generator

  • ·Works both ways. Build an expression from choices, or paste one and get it explained.
  • ·Real run times. See the next 10 runs in your server's time zone, with Daylight Saving Time handled.
  • ·Clear errors. If a field is wrong, the tool says which one and how to fix it.
  • ·Ready to paste. Copy it as a crontab line, a GitHub Actions schedule, or a Kubernetes CronJob.
  • ·Free and private. No signup, and nothing leaves your browser.

How to write a cron expression

  1. 1Start with an expression. Type or paste one into the box, or choose a starting point from the common schedules list, such as "Weekdays at 9:00".
  2. 2Adjust each field. Open the Minute, Hour, Day of month, Month, or Day of week tab, or click a field under the box. Choose every value, every N, specific values, or a range.
  3. 3Check the schedule. Read the sentence under the box and the next 10 run times. Set the time zone to the one your server or platform uses.
  4. 4Copy it. Copy the expression on its own, or switch to the crontab, GitHub Actions, or Kubernetes tab and copy the ready-made code.

Cron syntax: the five fields

A cron expression is five fields separated by spaces. Each one limits when the job can run, and the job runs at every minute that matches all of them. Times use the 24-hour clock.

FieldAllowed valuesExample
Minute0 to 5930
Hour0 to 239
Day of month1 to 311
Month1 to 12, or JAN to DECJAN
Day of week0 to 7, or SUN to SAT (0 and 7 are both Sunday)1-5

Inside a field, four characters let you match more than one value:

CharacterMeaningExample
*Any value* * * * * runs every minute
,A list of values0 9,17 * * * runs at 09:00 and 17:00
-A range of values0 9 * * 1-5 runs Monday through Friday
/A step through a range*/10 * * * * runs every 10 minutes

Cron expression examples

These cover most of the schedules people need. Paste any of them into the tool to see its next run times.

ExpressionRuns
* * * * *Every minute
*/5 * * * *Every 5 minutes
0 * * * *At the start of every hour
0 */6 * * *At 00:00, 06:00, 12:00, and 18:00 every day
0 0 * * *Every day at midnight
30 2 * * *Every day at 02:30
0 9 * * 1-5At 09:00, Monday through Friday
*/15 9-17 * * 1-5Every 15 minutes during work hours on weekdays
0 12 * * 6,0At 12:00 on Saturday and Sunday
0 0 * * 0Every Sunday at midnight
0 0 1 * *At midnight on the first of every month
0 0 1 */3 *At midnight on January 1, April 1, July 1, and October 1
0 0 1 1 *Once a year, at midnight on January 1

What the cron expression generator does

Plain-English description

Every expression you type or build is read back as a sentence, so you can check it says what you meant before it goes on a server.

Input*/15 9-17 * * 1-5ResultEvery 15 minutes, between 09:00 and 17:59, on Monday through Friday

Field editor

Edit one field at a time. Choose every value, every N, specific values from a grid, or a range, and the expression updates as you click.

InputHour: specific hours 9 and 17Result0 9,17 * * *

Next run times

See the next 10 times the schedule runs, in your own time zone or any other. Daylight Saving Time is taken into account.

Input0 9 * * 1ResultMon, Oct 19, 2026, 09:00

Copy for crontab, GitHub Actions, or Kubernetes

Copy the expression on its own, as a crontab line, as a GitHub Actions schedule, or inside a Kubernetes CronJob with the time zone set.

Input0 0 * * *Result- cron: "0 0 * * *"

How cron combines day of month and day of week

This rule surprises a lot of people. When both day fields are set to something other than *, cron runs the job on days that match either field, not only days that match both.

  • ·0 0 13 * 5 runs on the 13th of every month and on every Friday. It does not mean "Friday the 13th".
  • ·0 0 1 * 1 runs on the 1st of every month and on every Monday.
  • ·0 0 */2 * 1 is the exception. When one of the fields starts with *, both have to match, so this runs only on odd-numbered days that are also Mondays.

This is how Vixie cron and cronie, the cron programs on most Linux systems, behave, and this tool follows the same rule in its description and run times. To run a job only on a date that is also a certain weekday, schedule it on the weekday and check the date inside the script.

Cron syntax in GitHub Actions, Kubernetes, Quartz, and AWS

Many tools say they use cron, but not all of them read the same format. This generator writes the standard five-field format. Here is how other systems differ:

SystemFieldsWhat to know
crontab (Linux, macOS)5The standard format. Also accepts shortcuts like @daily.
GitHub Actions5Runs at most once every 5 minutes, and runs can start late when GitHub is busy.
Kubernetes CronJob5Standard format plus shortcuts like @hourly. The timeZone field sets the zone in version 1.27 and newer.
Spring @Scheduled6Adds a seconds field at the start.
Quartz Scheduler6 or 7Seconds first and an optional year last. One day field must be ?, and days of the week are 1 to 7 with Sunday as 1.
AWS EventBridge6Adds a year field at the end. One day field must be ?, and days of the week are 1 to 7 with Sunday as 1.

To move an expression from this tool to Spring or Quartz, add 0 at the start for the seconds. For Quartz and EventBridge, also replace the* in one of the day fields with ?, and write weekdays as names (MON-FRI) so the different numbering does not matter.

Who uses cron expressions

  • ·System administrators. Schedule backups, log rotation, and cleanup scripts on Linux servers.
  • ·Developers. Run nightly builds, dependency checks, and reports in GitHub Actions.
  • ·Platform and DevOps teams. Set up Kubernetes CronJobs for batch work and maintenance.
  • ·Data teams. Time data imports and exports so they run after the data they depend on is ready.
  • ·Anyone reading someone else's crontab. Paste a line you did not write and find out when it really runs.

Frequently asked questions

What does */5 mean in a cron expression?
The slash sets a step. */5 means every fifth value, starting from the lowest one the field allows. In the minute field that is minutes 0, 5, 10, and so on up to 55, so the job runs every 5 minutes. You can also put a step on a range: 0-30/10 means minutes 0, 10, 20, and 30.
Why does */7 not run exactly every 7 minutes?
A step starts again at the top of each field. */7 in the minute field runs at minutes 0, 7, 14, 21, 28, 35, 42, 49, and 56, and then at minute 0 of the next hour, which is only 4 minutes later. Steps that divide evenly into 60 minutes (or 24 hours) do not have this gap. The next run times in the tool show where the gaps fall.
How do I run a cron job every weekday?
Use 1-5 in the day of week field, which means Monday through Friday. For example, 0 9 * * 1-5 runs at 09:00 every weekday. You can also write it with names: 0 9 * * MON-FRI.
Why did my cron job run on more days than I expected?
When both the day of month and the day of week fields are set to something other than *, cron runs the job when either one matches, not only when both do. So 0 0 13 * 5 runs on the 13th of every month and also on every Friday. The plain-English description in the tool points this out when it happens.
Is Sunday 0 or 7 in cron?
Both. Standard cron accepts 0 and 7 for Sunday, and 1 through 6 for Monday through Saturday. You can also write SUN, MON, TUE, WED, THU, FRI, and SAT. Watch out in Quartz and AWS EventBridge, which count the days 1 to 7 starting with Sunday as 1.
What time zone does cron use?
Crontab uses the time zone of the server it runs on. Run date on the server to check it. Some cron versions, such as cronie, let you set CRON_TZ at the top of the crontab to choose another zone. Kubernetes CronJobs have a timeZone field from version 1.27. Pick the same zone in the tool to see the run times the way the server will.
Can cron run a job every 30 seconds?
Not directly. The smallest unit in standard cron is one minute. A common workaround is two crontab lines: one that runs the command every minute, and one that runs sleep 30 first and then the command. Quartz and Spring cron expressions have a seconds field if you need finer timing.
How do I run a cron job on the last day of the month?
Standard cron has no symbol for the last day. On Linux, schedule the job for days 28 to 31 and check whether tomorrow is the first: 0 0 28-31 * * [ "$(date -d tomorrow +\%d)" = "01" ] && /path/to/command. The percent sign needs a backslash in front of it in a crontab line.
What do @daily, @hourly, and @reboot mean?
They are shortcuts most Linux cron versions accept. @hourly is 0 * * * *, @daily (or @midnight) is 0 0 * * *, @weekly is 0 0 * * 0, @monthly is 0 0 1 * *, and @yearly (or @annually) is 0 0 1 1 *. @reboot runs the job once each time the system starts. Type any of them into the tool to see what they stand for.
Why does my cron expression with ? or L not work?
The characters ?, L, W, and # are not part of standard cron. They come from Quartz, Spring, and AWS EventBridge, which also use 6 or 7 fields. Crontab, GitHub Actions, and Kubernetes reject them. The tool tells you which part of the expression is the problem.
Is my data private?
Yes. The expression is checked and explained in your browser, and nothing is sent to a server.