Cron Expression Generator
Type a schedule in plain English and this generator writes the cron expression for it — “every weekday at 9am” becomes 0 9 * * 1-5. It also lists the next five run times, so you can check the result before it goes anywhere near a crontab.
At 9:00am on Monday, Tuesday, Wednesday, Thursday and Friday.
0 9 * * 1-5Generated from your description — edit the fields above if you need something more specific.
How to generate a cron expression
- Describe the schedule in the box above — how often, on which days, and at what time. For example: “every monday at 8am”.
- Read the result. The expression appears next to the COPY button, and the chips under the input show what each of the five fields was set to.
- Check the next five run times on the right. They're calculated in your browser's timezone, which may not be your server's.
- Copy the expression into your crontab, CI configuration or scheduler, followed by the command to run.
It works as a cron expression maker for anyone who'd rather describe a schedule than write one. The output is a standard five-field expression, so the same tool doubles as a crontab generator or cron job generator for any system that runs standard cron — paste the line straight into crontab -e.
Phrases the generator understands
The generator recognises scheduling words rather than whole sentences. Each of these works exactly as written:
| YOU TYPE | CRON EXPRESSION |
|---|---|
| every 10 minutes | */10 * * * * |
| twice an hour | 0,30 * * * * |
| hourly | 0 * * * * |
| every 2 hours | 0 */2 * * * |
| every day at 6:30pm | 30 18 * * * |
| at 14:30 | 30 14 * * * |
| at noon | 0 12 * * * |
| every weekday at 9am | 0 9 * * 1-5 |
| every monday at 8am | 0 8 * * 1 |
| weekends at 10am | 0 10 * * 0,6 |
| 15th of the month at 3pm | 0 15 15 * * |
| first day of every month at 9am | 0 9 1 * * |
| every year | 0 0 1 1 * |
In general it understands intervals (“every 15 minutes”, “every 2 hours”), day names and groups of days (“monday”, “weekdays”, “weekends”), times with am or pm or in 24-hour form (“at 6:30pm”, “at 14:30”), ordinal dates (“15th”), month names, and the words midnight, noon, hourly, daily and nightly.
When a request can't be expressed in standard cron — “every 30 seconds”, or “the last day of the month” — the generator tells you and explains why, rather than producing an expression that's quietly wrong. The every 30 seconds and last day of the month pages cover the workarounds.
Building a cron expression by hand
Every cron expression is five fields separated by spaces: minute, hour, day of month, month and day of week. To build one yourself, work from left to right and answer one question per field:
- Minute (0–59): at which minute past the hour?
0for on the hour,*/15for every quarter hour. - Hour (0–23): at which hours?
9for 9am,9-17for office hours,*for every hour. - Day of month (1–31): on which dates? Usually
*, or1for the first of the month. - Month (1–12): in which months? Usually
*. - Day of week (0–6, Sunday is 0): on which days?
1-5for weekdays,*for every day.
Leave a field as * when it shouldn't restrict anything. The field people most often get wrong is the minute: for an hourly job the minute has to be a number, because * there means every minute. The cron syntax cheatsheet covers every field and operator in detail, and the examples page has ready-made expressions for common schedules.
Before you deploy a generated expression
Three checks catch most scheduling bugs. Timezone: cron runs in the server's timezone, so compare the run times shown here with the server's clock. Day fields: if you restrict both day of month and day of week, cron runs when either one matches. Overlap: if a run can take longer than the interval, wrap the command in a lock such as flock -n so two copies can't run at once.
Frequently asked questions
Is this cron expression generator free?
Yes. It's free to use without an account, and the expression is generated in your browser — the words you type are never sent to a server or stored.
Which cron format does the generator produce?
Standard five-field cron, as used by crontab on Linux and macOS, Kubernetes CronJobs and GitHub Actions. Schedulers with a seconds field, such as Quartz, need an extra field at the front.
Why did the generator put 0 in the minute field?
Because a schedule like “every 2 hours” should run once at the start of each matching hour. With * in the minute field it would run every minute of those hours instead.
Can the generator make a cron expression for every 30 seconds?
No — standard cron's smallest unit is one minute, so no five-field expression runs every 30 seconds. The generator says so instead of producing a wrong expression.