Build, validate, and understand cron expressions - 100% in your browser
Runs every minute every day
0-59
0-23
1-31
1-12
0-7 (Sun=0,7)
every minute
every hour
every day
every month
every day
Choose a preset like "Every 5 minutes" or use the visual builder to configure each field.
Check the plain English explanation and next 10 execution times to confirm accuracy.
Copy the expression and paste it into your crontab, Kubernetes, GitHub Actions, or scheduler.
Configure each cron field (minute, hour, day, month, weekday) with dropdowns and checkboxes—no syntax memorization needed.
See the next 10 scheduled execution times with exact dates and times in your local timezone.
Every expression is translated into human-readable language like "At 9:00 AM, Monday through Friday".
Instant feedback on syntax errors with clear error messages explaining what went wrong.
| Schedule | Expression |
|---|---|
| Every minute | * * * * * |
| Every 5 minutes | */5 * * * * |
| Every hour | 0 * * * * |
| Daily at midnight | 0 0 * * * |
| Daily at 9 AM | 0 9 * * * |
| Weekdays at 9 AM | 0 9 * * 1-5 |
| Weekly on Sunday | 0 0 * * 0 |
| First of month | 0 0 1 * * |
Common syntax errors: minute must be 0-59, hour 0-23, day 1-31, month 1-12, weekday 0-7.
Solution: Check the field ranges and ensure you're using valid special characters (*, /, -, ,).
Cron uses the server's timezone, not yours. GitHub Actions uses UTC only.
Solution: Convert your desired time to the server's timezone before building the expression. For Kubernetes 1.27+, use spec.timeZone.
Day-of-month and day-of-week use OR logic when both are specified.
Solution: If you want "first Monday of month", you'll need a script check—cron alone can't express this. Use * in one of the day fields if you only want the other.
Edit with crontab -e. Use absolute paths. Check logs at /var/log/cron.
0 9 * * * /usr/bin/python3 /home/user/script.py
Uses UTC by default. Set spec.timeZone in K8s 1.27+. Consider concurrencyPolicy.
schedule: "0 9 * * 1-5"
UTC only. May have delays during high load. Minimum interval: 5 minutes. Inactive repos may have schedules disabled.
cron: '0 9 * * 1-5'
Uses 6 fields with year. Requires ? in day-of-month OR day-of-week. UTC only.
cron(0 9 ? * MON-FRI *)