★ What does this cron actually do?
Cron Expression Builder & Explainer
Type a cron expression or build one with inputs. Read it in plain English, see the next runs in your time zone, and copy the right syntax for crontab, GitHub Actions, Vercel, AWS or Kubernetes.
- Runs in your browser
- No signup
- 0Minute
- 9Hour
- *Day of month
- *Month
- 1-5Day of week
✓ Valid 5-field cron
Quick picks
Typing by hand. Pick a pattern above to build one with inputs instead.
In plain English
At 09:00 on Monday through Friday.
Next 10 runs
Paste it into your platform
Time zone: UTC
0 9 * * 1-5 /usr/local/bin/my-job >> /var/log/my-job.log 2>&1
- OKRuns in the server’s local time zone. cronie (RHEL, Fedora) accepts a CRON_TZ= line above the job; Debian’s cron does not.
- Heads-upEscape % as \% in the command: an unescaped % ends the command and starts stdin.
- Heads-upcron runs with a minimal PATH and no login shell. Use absolute paths and redirect output, or failures disappear.
- Linux crontab docs ↗
Cron jobs failing silently?
I build background job systems with retries, alerting and dashboards, so you hear about failures before your customers do.
Cron syntax cheat sheet
Five fields, separated by spaces, read left to right from smallest unit to largest. A job runs when the current time matches every field (with one exception for the two day fields, below).
| # | Field | Allowed values | Example | Means |
|---|---|---|---|---|
| 1 | Minute | 0–59 | */15 | every 15 minutes |
| 2 | Hour | 0–23 | 9-17 | 09:00 through 17:59 |
| 3 | Day of month | 1–31 | 1,15 | the 1st and the 15th |
| 4 | Month | 1–12 or JAN–DEC | */3 | Jan, Apr, Jul, Oct |
| 5 | Day of week | 0–6 or SUN–SAT (7 = Sunday too) | 1-5 | Monday to Friday |
Special characters
| Symbol | Meaning | Example |
|---|---|---|
* | Any value | * * * * * every minute |
, | A list of values | 0 9,17 * * * 09:00 and 17:00 |
- | A range, low to high | 0 9 * * 1-5 weekdays at 09:00 |
/ | Step through a range | */10 * * * * every 10 minutes |
a/n | Step starting at a | 20/15 * * * * minutes 20, 35, 50 |
Linux cron (Vixie cron and cronie) also accepts shortcuts: @hourly, @daily (or @midnight), @weekly, @monthly, @yearly (or @annually) and @reboot. GitHub Actions doesn't support them, so the builder always shows the five-field form too.
L, W, # and ? come from Quartz and AWS. They don't work in standard cron, GitHub Actions, Vercel or Kubernetes.
The day-of-month OR day-of-week rule
This is the rule that surprises everyone. When both day-of-month and day-of-week are set (neither starts with *), cron runs when either one matches, not when both do.
So 0 0 13 * 5 doesn't mean “Friday the 13th”. It runs on the 13th of every month and on every Friday. If either field starts with * (even */2), the normal “both must match” logic applies. That is how Vixie cron behaves, and the next-run list above follows it exactly.
To run on Friday the 13th only, schedule every Friday and exit early in the job unless the date is the 13th. AWS EventBridge avoids the ambiguity by forcing ? into one of the two fields.
Time zones and daylight saving
A cron expression has no time zone of its own; the scheduler supplies one. Linux cron uses the server's zone. GitHub Actions defaults to UTC but accepts an optional timezone. Vercel is always UTC. EventBridge rules are UTC, while EventBridge Scheduler takes a zone. Kubernetes uses the controller's zone unless you set spec.timeZone.
Daylight saving creates two edge cases. When clocks jump forward, a time like 02:30 doesn't exist, and this tool shows that run shifted later with a DST sticker, as Vixie cron and GitHub do. When clocks fall back, 01:30 happens twice, and the tool shows a single run at the first one. Different schedulers resolve these cases differently, so avoid scheduling important jobs between 01:00 and 03:00 local time.
Common schedules
- Every Minute
* * * * * - Every 2 Minutes
*/2 * * * * - Every 5 Minutes
*/5 * * * * - Every 10 Minutes
*/10 * * * * - Every 15 Minutes
*/15 * * * * - Every 30 Minutes
*/30 * * * * - Every Hour
0 * * * * - Every 2 Hours
0 */2 * * * - Every 3 Hours
0 */3 * * * - Every 6 Hours
0 */6 * * * - Every 12 Hours
0 */12 * * * - Twice a Day
0 9,21 * * * - Every Day at Midnight
0 0 * * * - Every Day at 9am
0 9 * * * - Every Day at Noon
0 12 * * * - Every Weekday
0 0 * * 1-5 - Every Weekday at 9am
0 9 * * 1-5 - Every Weekend
0 0 * * 6,0 - Every Monday
0 0 * * 1 - Every Friday at 5pm
0 17 * * 5 - Every Sunday at Midnight
0 0 * * 0 - Every Week
0 0 * * 0 - Every 15th of the Month
0 0 15 * * - First Day of the Month
0 0 1 * * - Last Day of the Month
0 0 28-31 * * - Every Month
0 0 1 * * - Every Quarter
0 0 1 1,4,7,10 * - Every Year
0 0 1 1 * - Every Hour During Business Hours
0 9-17 * * 1-5 - Every 30 Minutes During Business Hours
*/30 9-17 * * 1-5
Questions engineers actually ask
What does * * * * * mean in cron?
Is Sunday 0 or 7 in cron?
Why does my job run on days I didn't expect?
What time zone does cron use?
Can cron run every 30 seconds?
Does this tool send my expression anywhere?
Platform docs used
Platform rules were checked against each platform's documentation on 7 November 2026.
More from the workbench
Fine print
Tools: on the house.
Engineer: by the hour.
Infra that doesn't page you at 3am costs a little more. I build background job systems with retries, alerting and dashboards.
I'm Himanshu, an AI and full-stack engineer. I build MVPs, AI agents and the growth plumbing around them for early-stage startups.
