Cron Expression Builder
Build cron expressions visually. Plain-English description, common presets, copy-paste ready.
* * * * *Cron syntax basics
A cron expression is five space-separated fields: minute, hour, day-of-month, month, day-of-week. Each field has a numeric range and supports wildcards, specific values, steps, and ranges.
- Minute: 0–59
- Hour: 0–23 (24-hour format)
- Day of month: 1–31
- Month: 1–12 (or names: JAN-DEC)
- Day of week: 0–6 (Sunday = 0; or names: SUN-SAT). Some implementations also accept 7 for Sunday.
Special characters: * , - / and ?
- * (asterisk) — match any value.
* * * * *= every minute. - , (comma) — list of specific values.
0,15,30,45 * * * *= every 15 minutes. - - (hyphen) — range.
0 9-17 * * 1-5= every hour 9 AM-5 PM, Monday-Friday. - / (slash) — step.
*/5 * * * *= every 5 minutes. Starts from 0 by default. - ? (question mark) — Quartz/Spring only — “no specific value,” used to disambiguate when both day-of-month and day-of-week are set.
Common cron patterns
* * * * *— every minute*/5 * * * *— every 5 minutes0 * * * *— top of every hour0 9 * * *— 9 AM every day0 0 * * 0— midnight every Sunday0 9 * * 1-5— 9 AM weekdays0 0 1 * *— midnight on the 1st of every month0 0 1 1 *— midnight on January 1st (annual)30 14 * * 6— 2:30 PM every Saturday
Cron gotchas
The day-of-month / day-of-week trap
In standard Linux cron, if BOTH day-of-month AND day-of-week are specified (not *), the job runs when EITHER matches. So 0 0 13 * 5 runs at midnight on the 13th of every month AND every Friday — not just on Friday the 13th. To run only on Friday the 13th, you need scripting (use one specific check inside the job).
Time zones
Linux cron uses local time zone (set via TZ env or system default). AWS CloudWatch and GitHub Actions use UTC. Always verify which time zone your scheduler expects. DST transitions can cause jobs to run twice or be skipped — schedule outside the 1-3 AM window when possible.
Step starting points
*/30 in the minute field means “0 and 30,” not “every 30 minutes from when I save.” To start at minute 5: 5,35 instead of */30.
Linux vs cloud cron formats
- Linux/Unix cron: 5 fields, local time zone.
- AWS CloudWatch / EventBridge: 6 fields (adds year), UTC, slightly different syntax (no
?issue). - GitHub Actions: 5 fields, UTC. Minimum interval 5 minutes (technically supports 1 min but unreliable).
- Vercel cron: 5 fields, UTC. Hobby tier limited to daily; pro/enterprise unlimited.
- Quartz (Java/Spring): 6 or 7 fields (seconds + optional year). Uses
?for unspecified. - Kubernetes CronJob: 5 fields, time zone configurable per job (Kubernetes 1.25+).
When NOT to use cron
- Sub-minute schedules: cron's minimum is 1 minute. For seconds, use a queue worker or a scheduler designed for it.
- Complex dependencies: if Job B depends on Job A finishing, use a workflow tool (Airflow, Prefect, GitHub Actions) instead of timed cron.
- Event-driven needs: if it should run when X happens, use a queue or webhook, not cron polling.
- Long-running jobs: cron jobs that take longer than the interval can stack. Add lock files or use a job runner that handles this.
- High-availability: vanilla cron runs on one machine. For HA, use a distributed scheduler.
For other developer tools: Regex Tester for pattern matching, JWT Decoder, and UUID Generator.