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
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.
*/7in a 24-hour clock - fires every 7 hours starting at 00 but doesn't hit 24:00 (it wraps).0vs7for 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-5Weekdays at 18:00
- 0 0 1 * *Once a month, on the 1st at midnight
Cheatsheet
Full cheatsheet| Field | Req. | Range | Wildcards |
|---|---|---|---|
| minute | yes | 0-59 | , - * / |
| hour | yes | 0-23 | , - * / |
| day of month | yes | 1-31 | , - * / |
| month | yes | 1-12 or JAN-DEC | , - * / |
| day of week | yes | 0-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 * * * *
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
Day-field rulesTimezones 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 * * *
DST referenceHow 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.
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 checklistHow 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 checklistWhy 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 stepsCan 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.
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.
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