Skip to main content

Cron Debugger - debug any cron expression online

Valid cron expression

At 00:00, on day 31 of the month, only in February.

Next runs · UTC

Calendar

September 2026 · UTC

This expression never fires — day 31 does not exist in February

About this tool

Paste a cron expression that's misbehaving and CronTool tells you exactly when it will fire next, what each field means, and which validation rule it's breaking. The debugger works for standard Unix crontab, AWS EventBridge / Lambda Scheduled, Vercel cron jobs, Quartz Scheduler and other extended cron implementations.
The most common cron bugs are not syntax errors - they're schedule mismatches. Seeing the next 30 runs on a real calendar makes the wrong hour, the missed weekend, or the day-of-week vs day-of-month conflict obvious in seconds.

How to debug a cron expression

Drop your expression into the field grid above. Every invalid or out-of-range value is highlighted in red, with the parser error explained in plain English at the bottom. The calendar instantly redraws to show when the cron really fires - including weekends, holidays and the awkward end-of-month cases.

Toggle the extended cron expressions switch in the top bar to enable the seconds and year fields used by Quartz, AWS EventBridge (6 fields) and Vercel cron jobs. Switching modes also activates the ?, L and W modifiers.

Common cron bugs the debugger catches

  • Setting both day-of-month and day-of-week in standard cron (which OR-joins them and produces unexpectedly frequent runs).
  • Using ? in standard crontab (only valid in Quartz and a handful of other extended dialects).
  • Mixing the seconds field in (and out) by accident - most systems have 5 fields, AWS EventBridge has 6, Quartz has 6 or 7. The debugger flags the mismatch.
  • */7 in a 24-hour clock - fires every 7 hours starting at 00 but doesn't hit 24:00 (it wraps).
  • 0 vs 7 for Sunday differs across schedulers; CronTool normalises both, but warns you when using Quartz syntax.

Share debugging context with your team

Use the Get link button to copy a shareable URL with the cron pre-filled. Drop it in the PR description, the runbook or the Slack thread - whoever opens it sees the same calendar and validation output you did. No login, no account, no paid plan.

For multi-cron debugging (e.g. a job that runs every 15 minutes except 03:00), use the multi-cron visualizer - it overlays multiple expressions on one calendar with color-coded labels.

Tired of debugging cron?

Crontap schedules API calls on cron without you maintaining a daemon, a container, or a shell user. Bring your endpoint, drop a cron, and watch it run.

Examples

  • 0 18 * * *
    Every day at 18:00
  • 0 */5 * * *
    Every 5 hours
  • 0 18 * * 1-5
    Weekdays at 18:00
  • 0 0 1 * *
    Once a month, on the 1st at midnight

Cheatsheet

Full cheatsheet
FieldReq.RangeWildcards
minuteyes0-59, - * /
houryes0-23, - * /
day of monthyes1-31, - * /
monthyes1-12 or JAN-DEC, - * /
day of weekyes0-6 or names; some dialects use 0-7 or 1-7 — see Dialects, - * /

Frequently asked questions

Syntax

What are the most common cron expression mistakes?

Common mistakes include using the wrong field count, exceeding field ranges, assuming day-field semantics are portable, treating steps as elapsed intervals, and overlooking timezone or DST behavior. Validate against the production scheduler after checking CronTool's preview.

Timing

Why does my cron skip runs?

The host may have been offline, the scheduler delayed work, or a concurrency policy may have suppressed a run. Vercel invocations can overlap; prevent that with an application lock. Quartz uses @DisallowConcurrentExecution for non-overlap behavior.

How do I debug overlapping cron runs?

Compare run duration with schedule frequency, then inspect the scheduler's concurrency policy. CronTool shows intended start times but cannot tell whether a previous process is still running. Expression: */5 * * * *

Open in editor

Days and months

Which calendar clue reveals a Vixie day-field bug?

Vixie cron ORs the restricted day fields, so it runs at 09:00 on every Monday and on the first of every month. Leave one day field unrestricted. Expression: 0 9 1 * 1

Open in editor
Day-field rules

Timezones and DST

How does cron handle daylight saving time changes?

Vixie cron can skip a nonexistent spring-forward time and repeat a fall-back time. EventBridge Scheduled Rules use UTC; EventBridge Scheduler can use an IANA timezone. Check the target scheduler's DST policy. Expression: 30 2 * * *

Open in editor
DST reference
How do I debug a cron firing at the wrong hour?

Compare the timezone selected in CronTool with the scheduler's clock. Vercel uses UTC, GitHub Actions defaults to UTC, Kubernetes supports .spec.timeZone, and Vixie-compatible cron may support CRON_TZ.

Scheduler timezone table

Debugging

Why is my cron not running when I expect?

Compare CronTool's five expected runs with actual scheduler logs. Then check the scheduler timezone, Vixie day-field OR behavior, daemon status, PATH, environment variables, working directory, permissions, and command output.

Debugging checklist
How do I capture cron output for debugging?

Redirect both stdout and stderr in your crontab line: * * * * * /your/script.sh >> /var/log/myjob.log 2>&1. Without redirection, output is mailed to the user account, which you may not check. For containerised cron (Kubernetes CronJobs, AWS Lambda Scheduled), check the platform's log stream.

How can I test a cron expression without waiting for it to fire?

Paste it into CronTool to validate fields, read the sentence, inspect five next runs, and navigate the month calendar. Test the command separately in cron's environment or use your scheduler's documented one-off mechanism.

What should I test after the schedule looks correct?

Schedule validity only proves the clock rule parses. The daemon may be stopped, the command may fail, permissions may block it, or the host may be offline.

Runtime debugging checklist
Why does cron say command not found when my shell works?

Cron usually has a shorter PATH and does not source interactive shell profiles. Use absolute executable paths and export every required environment variable explicitly.

PATH debugging steps
Can a percent sign break a crontab command?

Yes. In traditional crontab commands, an unescaped % may split the command and standard input, so escape literal percent signs or put the command in a script.

Command debugging checklist
Why do relative paths fail under cron?

Cron does not guarantee the working directory your interactive shell uses. Change directory explicitly or use absolute paths for scripts, inputs, and logs.

What belongs in a reproducible CronTool debugging link?

Include cron=<expression>, mode=extended when needed, and tz=<IANA zone> when timezone matters. CronTool's built-in Copy link omits timezone, so add it before sharing a timezone-sensitive case.

Which failure classes remain after CronTool debugging?

Runtime failures remain: daemon state, PATH, environment, permissions, logs, exit status, and process overlap. CronTool never runs commands; its calendar isolates schedule mistakes.

Write the cron here. Run it on Crontap.

Point Crontap at any URL. Pick any cron. Done.

WordPress, Shopify, Railway, Cloud Run, Vercel, HubSpot, Ghost, your own box. If it answers HTTP, Crontap can drive it on a clock you can read, in the timezone that actually matters, and page you when something breaks.

1.9k+ teams · Free forever tier · No credit card