Cron Expression Builder
Cron is the standard syntax for scheduling recurring jobs on Unix systems, in container orchestrators, CI pipelines, and cloud schedulers. Its five compact fields are easy to get wrong. This builder lets you set each field, applies quick presets, and translates the result into a plain-English sentence so you can confirm the schedule before shipping it.
Field reference
A cron expression has five space-separated fields:
┌ minute (0-59)
│ ┌ hour (0-23)
│ │ ┌ day of month (1-31)
│ │ │ ┌ month (1-12)
│ │ │ │ ┌ day of week (0-6, Sun=0)
* * * * *
Each field accepts a single value, * for every value, a list like 0,30, a range like 1-5, or a step like */15. The builder validates each entry against its allowed range and then describes the schedule by reading the fields together, naming weekdays and months where helpful.
Common patterns and what they produce
| Expression | Fires |
|---|---|
*/5 * * * * | Every 5 minutes |
0 9 * * 1-5 | At 09:00 Monday through Friday |
0 0 1 * * | At midnight on the first of every month |
30 6 * * 0 | At 06:30 every Sunday |
0 */4 * * * | At the start of every fourth hour (00:00, 04:00, 08:00 …) |
0 12 15 * * | At noon on the 15th of every month |
Important behaviours to understand
Day-of-month and day-of-week interaction: in standard cron, when both the day-of-month and day-of-week fields are explicitly restricted (neither is *), the job fires when either condition is true, not when both are true simultaneously. For example 0 9 15 * 1 fires at 09:00 on the 15th of every month and at 09:00 every Monday — not only on Mondays that fall on the 15th. This surprises many people. If you want to restrict to one axis only, set the other to *.
Time zones on servers: cron evaluates against the server’s system clock, which is usually UTC on cloud and VPS instances. A job set to 0 9 * * * fires at 09:00 UTC — which is 10:00 BST in summer or 05:00 Eastern time. Always confirm your platform’s clock before deploying a time-sensitive schedule.
Minimum resolution: standard cron can only fire at most once per minute. For sub-minute jobs you need a dedicated scheduler or a loop inside the job itself.
Building and verifying a schedule
Set each field individually or start from a preset, then read the plain-English summary to confirm you have the right schedule. Copy the finished expression and paste it directly into your crontab, GitHub Actions schedule: block, Kubernetes CronJob spec, or cloud scheduler. The builder runs entirely in your browser — nothing is sent to any server.