Cron Expression Checker
100% CLIENT-SIDE
Cron Expression (5 fields, or an @special)
Human Translation & Next Runs
More from CronProbe
Crontab File Checker
Paste a whole crontab and check every line: invalid schedules with the exact field at fault, unescaped %…
Cron Next Runs in Any Time Zone
See when a cron expression fires in any IANA time zone, alongside UTC, and which scheduled times are…
Guides
Frequently Asked Questions
Is my data safe on cronprobe.net?
Yes. Cron expressions are parsed in your browser. Nothing is sent to a server.
What does 0 */6 * * * mean?
Minute 0 of every 6th hour: 00:00, 06:00, 12:00, and 18:00, daily. The step operator */6 applies to the hour field, so it counts from 0 rather than from the current time.
How do I see when a cron job will actually run next?
Enter the expression and the schedule visualizer expands each field into plain English and lists the upcoming run times. Day-of-month and day-of-week are OR-ed together when both are restricted, which is the most common source of surprise runs.
🧭 Pro Tips & Gotchas
What it checks
- Five whitespace-separated fields are parsed and labelled individually: minute, hour, day-of-month, month, day-of-week. A sixth leading field (seconds, Quartz-style) is rejected here — standard cron is five.
- The breakdown shows each field's expansion, so
*/15reveals itself as four hits per hour instead of staying cryptic. - Next-run times are computed here with Vixie-cron rules and reported in your browser's time zone, which the output names. If your server runs a different zone, use the time-zone page to evaluate the schedule there: a schedule evaluated in a DST-observing zone can skip or double-run on transition days.
Cron gotchas that cost real money
- Day-of-month and day-of-week are OR'd in classic Vixie cron:
0 9 1 * 5fires on the 1st and every Friday, not "the first Friday". And1-5is inclusive on both ends. This checker applies that OR rule and warns you when both day fields are restricted. - Both day fields constrained is the classic monthly-report bug. If you need "first Friday only", gate inside the job instead of the schedule.
@rebootdoes not mean what people hope on laptops and containers: it means the host rebooted, not the service started. Use systemdWantedBy=timeror an entrypoint hook.- Fallback if you need a missing special string:
@dailyis exactly0 0,@weeklyis0 0 0,@monthlyis0 0 1,@yearly/@annuallyis0 0 1 1. - DST: a job at
3:30may run twice on fall-back or not at all on spring-forward, depending on the scheduler. Schedule in UTC (CRON_TZ=UTC/TZ=UTC) or accept the drift. 0 0 29 2is never satisfied in non-leap years;0 0 2-4and0 0 * 7behave differently across implementations (7is Sunday in most, rejected by some).- Overlapping runs are the default. Wrap real work in
flock -n /tmp/job.lock command...so a slow run cannot stack against the next tick. - Cron's
PATHis minimal andMAILTOis usually unset, so a job that works in your shell fails with "command not found". Use absolute paths and log explicitly.
Developer Sponsor / Partner