^cronlint
A linter for cron expressions — catches the mistakes that break schedules silently.
$
npm install -g @zbcdo/cronlint$ cronlint "0 0 30 2 *" error[never-fires]: This job will never run: it is scheduled ONLY for the 30th of February — a date that does not exist. Cron accepts an impossible date without complaint and simply never fires it. Use a day that month actually has, such as the 28th. 0 0 30 2 * ^^ = docs: https://cronhelp.me/rules/never-fires 1 error, 0 warnings, 0 notes
Usage
cronlint "<expression>" lint one expression cronlint --tz America/New_York evaluate DST rules against a zone cronlint --format compact one line per finding (grep-friendly) cronlint --format github annotation output for GitHub Actions CI cronlint --format json machine-readable diagnostics cronlint --strict warnings also fail (exit 1) crontab -l | cronlint - lint every line of your crontab npx @zbcdo/cronlint "<expr>" run without installing
Full reference in the README →
Thirteen rules so far…
- never-fires
- step-invalid
- dom-unreachable-months
- dom-dow-both
- star-minute-restricted
- dst-ambiguous
- range-wrap
- freq-extreme
- leap-day-only
- nonportable-shortcut
- redundant-term
- step-uneven
- dow-sunday-7
Try it live → cronhelp.me
Paste an expression, see every finding explained.