artisan.dev

Cron Expression Generator

5-field Unix crontab syntax
~/utils/cron▍
▸MINUTE0–59
▸HOUR0–23
▸DAY-OF-MONTH1–31
▸MONTH1–12
▸DAY-OF-WEEK0–6
└─▶At 09:00 on weekdays · timezone UTC
#visual-builder
Minutem
$0
▾
Hourh
$9
▾
Day of Monthdom
$*
▾
Monthmon
$*
▾
Day of Weekdow
$1-5
▾
#firing-pattern
0003060912151821
MON
TUE
WED
THU
FRI
SAT
SUN
hover cells to inspect · ▪ fires · ▪ idle · ▪ now
18:21:29·Fri, Oct 9, 2026UTC
#next-runsfrom now
#01mon Oct 1209:00in 2d 14h
#02tue Oct 1309:00in 3d 14h
#03wed Oct 1409:00in 4d 14h
#04thu Oct 1509:00in 5d 14h
#05fri Oct 1609:00in 6d 14h
#06mon Oct 1909:00in 9d 14h
#copy-as
crontab
0 9 * * 1-5  /path/to/job.sh
github-actions
on:
  schedule:
    - cron: '0 9 * * 1-5'
kubernetes
schedule: "0 9 * * 1-5"
systemd-timer
OnCalendar=*-*-* 09:00:00

How to build and read cron expressions

This cron expression generator lets you build a schedule field by field — with presets like "every 15 minutes", "weekdays" or "1st of the month", or any custom value — and see immediately what it means. It translates the expression into plain English, lists the next six times it will run in your local timezone, and draws a weekly heatmap so you can see at a glance when a job fires.

When the schedule looks right, copy a ready-made snippet for crontab, GitHub Actions, a Kubernetes CronJob or a systemd timer. Everything is calculated in your browser.

How to use the cron generator

  1. Click each of the five fields — minute, hour, day of month, month and day of week — and pick a preset, or type a custom value such as */10 or 9-17 and press Enter.
  2. To decode an existing expression such as 30 2 * * 1-5, enter each of its five parts into the matching field.
  3. Read the plain-English description and check the next runs list. Make sure the times match what you expect in your timezone.
  4. Use the heatmap to spot problems such as a job that runs every minute of an hour instead of once.
  5. Copy the snippet for your platform: crontab, GitHub Actions, Kubernetes or systemd.

Cron format in one minute

*  *  *  *  *
│  │  │  │  └─ day of week   0–6 (0 = Sunday)
│  │  │  └──── month         1–12
│  │  └─────── day of month  1–31
│  └────────── hour          0–23
└───────────── minute        0–59
SyntaxExampleMeaning
** * * * *Every minute
,0 9,13,17 * * *At 09:00, 13:00 and 17:00
-0 9 * * 1-509:00 on weekdays
/*/15 * * * *Every 15 minutes

Need more examples? The cron syntax cheatsheet has 25 copy-ready schedules and the platform-specific gotchas.

Common cron mistakes

  • * 9 * * * is not "daily at 9". It runs every minute from 09:00 to 09:59 — 60 times. Use 0 9 * * *. The heatmap makes this mistake obvious.
  • Day-of-month and day-of-week are combined with OR. 0 0 1 * 1 runs on the 1st of every month and every Monday. The next-runs list here follows the same rule as crontab, so you can verify it.
  • Wrong timezone. System cron uses the server's timezone; GitHub Actions always uses UTC. A job meant for 9 am in Dhaka (UTC+6) should be 0 3 * * * in GitHub Actions.
  • Uneven steps. */7 in the minute field fires at :56 and then again at :00 — steps restart every hour. Choose a step that divides 60 (or 24 for hours) evenly.
  • Six-field expressions. Quartz, Spring and AWS EventBridge add a seconds or year field and use ?. Standard crontab, GitHub Actions and Kubernetes only accept five fields.

Using the schedule on each platform

PlatformWhere it goesTimezoneNote
crontabcrontab -e, one job per lineServer local timeUse absolute paths; escape % as \%
GitHub Actionson.schedule[].cron in a workflowUTCShortest interval is 5 minutes; runs may start late
Kubernetesspec.schedule of a CronJobController's zone unless spec.timeZone is setSet concurrencyPolicy to avoid overlap
systemdOnCalendar= in a .timer unitSystem time (zone can be appended)Different syntax; the snippet covers daily time-of-day schedules

Frequently asked questions

What does * * * * * mean?

Five asterisks means "every minute of every hour of every day". Each * is a wildcard for one field: minute, hour, day of month, month, day of week.

How do I run a cron job every 5 minutes?

Use */5 * * * *. It fires at minutes 0, 5, 10 … 55 of every hour.

What timezone are the next run times shown in?

Your browser's local timezone. If your server or CI runs in UTC, convert accordingly — GitHub Actions schedules are always evaluated in UTC.

Does this support seconds or Quartz syntax?

No. It uses the standard five-field format supported by crontab, GitHub Actions and Kubernetes. Quartz-style expressions with a seconds field or ? are not supported.

Further reading

Related tools