Free tools

Cron expression generator

Build a cron expression, or paste one to see what it means in plain English and when it runs next in your time zone.

Every weekday at 09:00

Common schedules

Build an expression
On

Next runs

  1. Run times show up here when JavaScript is on.

Runs in your browser. Nothing you type here is sent to a server.

Run this schedule without a server

Delay calls your URL on this schedule, in the time zone you choose, and keeps the status code and response of every run. When runs keep failing, your team hears about it in Slack, Discord or email. Free for 1,000 requests a month.

How a cron expression works

A cron expression is five fields separated by spaces: minute, hour, day of month, month and day of week. A job runs at every minute where all five match. 0 9 * * 1-5 reads as minute 0, hour 9, any day of the month, any month, Monday to Friday: 09:00 on weekdays.

When you set both day fields, cron runs on days that match either one. 0 9 1 * 1 runs on the 1st of the month and on every Monday, not only on Mondays that fall on the 1st. To get "the first Monday", use 0 9 * * 1#1.

Time zones and daylight saving

A crontab runs in the time zone of the machine it's on, which on most cloud servers is UTC. If your users are in Berlin, 0 9 * * * on a UTC server runs at 10:00 in winter and 11:00 in summer.

The run times above are worked out in the zone you pick, with daylight saving applied. On the night clocks go forward, a time that doesn't exist runs an hour later. On the night they go back, a time that happens twice runs twice. Both are marked in the list.

Cron without a server

A crontab lives on one machine. When that machine is replaced, or a deploy drops the crontab, the jobs stop and nothing tells you. If the job is an HTTP request to your app, a hosted scheduler can make that request on the same schedule and keep a record of every run.

Cron syntax cheat sheet

Field Values Special characters
Minute 0–59 * , - /
Hour 0–23 * , - /
Day of month 1–31 * , - / ? L W
Month 1–12 or JAN–DEC * , - /
Day of week 0–7 or SUN–SAT (0 and 7 are Sunday) * , - / ? L #
*
Every value of the field. * in hour: every hour.
,
A list of values. 1,15 in day of month: the 1st and 15th.
-
A range, low to high. 1-5 in day of week: Monday to Friday.
/
A step, after * or a range. */15 in minute: :00, :15, :30, :45.
L
Last: the last day of the month, or the last given weekday. 5L in day of week: the last Friday.
W
The weekday nearest to a day of the month. 15W: the weekday closest to the 15th.
#
The nth given weekday of the month. 1#2: the second Monday.
?
No specific value, in one of the two day fields. 0 9 ? * MON.

Examples

  • Every minute
  • Every 10 minutes
  • Every 6 hours, on the hour
  • Every day at 02:30
  • Weekdays at 09:00 and 17:00
  • Saturdays and Sundays at 10:00
  • The 1st and 15th of every month at midnight
  • The first Monday of every month at 08:00
  • Every year on January 1 at midnight

Questions

What does */15 mean in a cron expression?

A step of 15 starting from the lowest value. In the minute field, */15 means minutes 0, 15, 30 and 45. A step also works on a range: 0-30/10 means 0, 10, 20 and 30.

Is Sunday 0 or 7?

Both. Day of week takes 0 to 7, and 0 and 7 are both Sunday, so 1-5 is Monday to Friday and 6,0 or SAT,SUN is the weekend. You can also write the names: MON-FRI.

Can cron run a job every 30 seconds?

No. The smallest unit is a minute. To do something twice a minute, run the job every minute and have it do the work, wait 30 seconds and do it again, or put the work on a queue.

Which time zone does cron use?

The one set on the machine that runs it, usually UTC on servers. Pick the zone in the run time list to see when an expression fires there. If you need a UTC expression for a schedule in local time, use the cron time zone converter.

What do L, W and # mean?

They are extensions most schedulers support. L means last: L in day of month is the last day, and 5L in day of week is the last Friday. 15W is the weekday nearest the 15th. 1#2 is the second Monday of the month.

Does this work for GitHub Actions, Kubernetes or Vercel cron?

Yes for the five-field syntax they share. Check which time zone the platform reads schedules in: many use UTC unless you set one, so pick UTC above to match. L, W and # aren't supported everywhere.

Schedule your first cron job

Free for 1,000 requests a month. No credit card.

Read the docs