Cron Expression Builder

Build a cron expression just by picking minute, hour, day, month and weekday from dropdowns and number inputs. Preview the generated cron string, a plain-English description, and the next 5 run times instantly — handy for writing a crontab or GitHub Actions schedule.

Quick reference for common schedules

A list of cron expressions for typical schedules. Click a row to apply it as a preset in the builder above.

Preset Cron expression Meaning
Daily at midnight 0 0 * * * Runs daily at midnight (00:00).
Weekdays at 9 AM 0 9 * * 1-5 Runs at 9:00 on weekdays (Monday through Friday).
Hourly at minute 0 0 * * * * Runs once an hour, at minute 0.
Every Monday 0 0 * * 1 Runs every Monday at midnight (00:00).

What a cron expression is

A cron expression is the five numeric fields that tell a UNIX job scheduler when to run something. From left to right they are minute, hour, day of month, month and day of week, separated by spaces, as in `30 3 * * 1` — every Monday at 3:30 in the morning. The notation is compact, but that is also its weakness: a mistyped field is usually still syntactically valid, so the job quietly runs at the wrong time and nobody notices until much later.

This builder lets you set each of the five fields using one of five modes — every value, a single value, a list, a range or a step — and shows the resulting expression alongside a plain-language reading of it. Because you can go from inputs to expression and from expression back to a sentence on the same screen, you can check that what you wrote is what you meant before it ever reaches a server. Everything runs in your browser; nothing you type is sent anywhere.

Building a cron expression

  1. Start from a preset Pick the closest of the four presets — midnight daily, 9 a.m. on weekdays, hourly on the hour, or weekly on Monday — and every field is filled in for you. It is faster than starting from scratch and leaves less room for slips.
  2. Choose a mode for each field For minute, hour, day, month and day of week, pick every value (*), a single value, a list, a range or a step (*/n). Leave the fields you do not care about on "every value".
  3. Enter the values A list takes comma-separated numbers, a range takes a start and an end, and a step takes the interval. Minutes run 0–59, hours 0–23, days 1–31, months 1–12 and weekdays 0–6 with 0 meaning Sunday.
  4. Check the expression against the description Read the generated expression and the sentence beneath it side by side. If the sentence does not match your intent, adjust the field that is wrong.
  5. Paste it into your crontab Once it reads correctly, copy the expression, open your table with `crontab -e`, put it at the start of a line and write the command you want to run after it.

Tips for getting more out of it

  • Setting the day-of-week field to "Range" mode from 1 to 5 gives you Monday through Friday in one step.
  • "List" mode lets you enter several values separated by commas — e.g. entering "0,15,30,45" for the minute field is equivalent to running every 15 minutes.
  • If both the day-of-month and day-of-week fields are set to anything other than "Every (*)", standard cron treats them as an OR condition — the job runs when either one matches.
  • The generated cron string can be copied to your clipboard with the "Copy" button, ready to paste straight into a crontab or a GitHub Actions YAML file.
  • Click a preset button, or a row in the quick reference table below, to apply a common schedule to the builder in one click.

Where this tool helps

Scheduling backups and batch jobs

Database dumps and log rollups usually belong in the quiet hours. You can assemble something like "3:05 every morning" without having to recall the syntax first.

Running on business days only

Setting the day-of-week field to the range 1–5 restricts a job to weekdays. Cron knows nothing about public holidays, so if you need those excluded, put the check inside your script.

Decoding an expression somebody else wrote

When you inherit a server whose crontab contains `*/15 2-5 * * *`, reproducing the same settings here and reading the description keeps you from guessing wrong.

Setting schedules for CI and containers

GitHub Actions `schedule` entries and Kubernetes CronJobs use the same five fields. They normally run in UTC, though, so remember to shift the hour field by your offset.

Cron terms explained

cron
The long-running program on UNIX-like systems that executes commands at specified times. Its configuration lives in a per-user table called a crontab.
crontab
Both the schedule table itself and the command used to edit it (`crontab -e`). Each line pairs a cron expression with the command to run.
Asterisk (*)
Means "every value" for that field. An asterisk in the minute field means every minute; in the month field it means every month.
Step (*/n)
Runs on every nth value. `*/15` in the minute field means minutes 0, 15, 30 and 45. The count always starts from the lowest value of the field — it does not mean "n minutes after the last run".
Lists and ranges
A list is comma-separated (`1,15`); a range is joined with a hyphen (`9-17`). The two can be combined in one field, as in `1-5,10`.
Day of month with day of week
In most cron implementations, restricting both the day-of-month and the day-of-week field means the job runs when **either** matches, not both. `0 0 1 * 1` therefore means "the 1st of every month, and also every Monday" — a combination that surprises people regularly.

Frequently Asked Questions

A crontab entry is a string of 5 space-separated fields: minute, hour, day, month, and weekday. This tool lets you pick each field from a dropdown or number input, and it assembles those 5 fields for you automatically, so you can build a correct cron expression without memorizing the syntax.

Set the day-of-week field to "Specific value" mode and choose 1 (Monday) — that produces "0 0 * * 1", which matches only Mondays. Adjust the minute and hour fields (also in "Specific value" mode) if you want a different time of day.

Set the day-of-week field to "Range" mode from 1 (Monday) to 5 (Friday). Note that cron has no concept of public holidays, so if you need to skip Japanese (or any other) holidays, you will need to add that check separately in your script.

Yes. It generates a standard 5-field cron expression (Vixie cron compatible), so it works as-is in a Linux server crontab, a GitHub Actions schedule, a Kubernetes CronJob, and most other environments that use the same 5-field cron syntax.
Tool-kun

Side Note — Why Writing a Cron Expression Is Harder Than Reading One

A cron expression looks simple once you know its 5 fields, but writing one by hand means recalling details like whether "*/15" or "1-30/5" is the right form, or whether weekdays start at 0 or 1 — details that are surprisingly easy to get wrong. Reading an existing cron expression (the job of this site's Cron Expression Parser) is comparatively mechanical, since you just walk through the fields one by one.

This tool is built around that asymmetry: it supports the act of building a cron expression from UI selections rather than typing raw syntax. You express your intent directly — "run at 9 AM on weekdays" — through dropdowns and number inputs, and the tool assembles a cron expression that satisfies it, removing the need to memorize the syntax altogether.

As a final sanity check, the tool previews the next 5 scheduled run times for the expression you just built. This matters especially because of a subtle rule that trips people up: when both the day-of-month and day-of-week fields are restricted, cron treats them as an OR condition rather than an AND. Seeing the actual candidate dates helps catch a job that would otherwise run more often than intended.