Skip to content

Cron Parser

Paste a cron expression to get a plain-English description, the next 10 run times, and per-field explanations. Common templates included.

100% Free No signup Browser-only 5 languages Dark mode

    📖 Cron syntax

    📖 Where people get stuck

    Paste a cron expression and this page explains it in words and computes the next ten run times. The times are calculated in your browser timezone, not in the timezone of the server that will actually run the job. And a valid expression is a separate question from whether the job runs at all — nothing here can tell you if the cron daemon is up, or whether the executing user has the right permissions and PATH.

    Case What happens What to do
    Specifying both day-of-month and day-of-week When neither field is *, they are combined with OR, not AND. 0 0 1 * 1 does not mean the first of the month and a Monday — it means the first of the month or any Monday, firing about five times a month. This Vixie-cron behaviour is counter-intuitive and a classic source of incidents. Always leave one of the two as *. If you genuinely need the AND — the first of the month only when it falls on a Monday — schedule it daily and test the date at the top of the script and return early.
    Using */n outside the minute field */n means values divisible by n, not every n hours. 0 */5 * * * fires at 00, 05, 10, 15 and 20, and the gap from 20:00 to the next 00:00 is four hours, because 24 is not divisible by 5. The same wrap-around happens on the day-of-month field at the end of a month. For an even interval, list the values explicitly: 0 0,6,12,18 * * * for every six hours. In the minute field */5 is genuinely even, because 60 divides by 5, 10, 15, 20 and 30. To restrict to working hours, a range works: 0 9-18 * * 1-5.
    Runs by hand but never under cron The environment cron hands you is nothing like a login shell. PATH is little more than /usr/bin:/bin, .bashrc is not read, and nothing initialises nvm or rbenv. Worse, stdout and stderr go nowhere unless mail is configured, so the failure is invisible. Use absolute paths for every command — whatever which node printed — declare PATH= and CRON_TZ=Asia/Tokyo at the top of the crontab, and append >> /var/log/myjob.log 2>&1. To debug, schedule * * * * * env > /tmp/cronenv for one minute and read exactly what environment cron is handing over.

    This parser targets standard five-field cron: minute, hour, day of month, month, day of week. The six-field form with leading seconds is an implementation extension found in Quartz, node-cron and Spring @Scheduled, and a Linux crontab will reject it. Conversely, shorthands such as @daily and @reboot work in crontab but are not understood by many libraries. Check the documentation of whatever will actually run it.

    ❓ Frequently Asked Questions

    Does it support 6-field (with seconds)?
    Currently 5-field standard (Linux crontab) only. Quartz/Spring seconds-syntax not supported yet
    For complex expressions?
    Always check "next 10" — esp. tricky for dow + dom combinations (OR not AND in Linux cron!)
    Timezone?
    Display is local browser time. Verify it matches the server's cron TZ
    🐛 Found a bug or issue with this tool?

    Free to use, no signup. Even just the steps to reproduce are helpful. Reports go directly to the operator and help us fix issues.

    * Browser info (UA / screen / language / URL) is sent automatically to help reproduce the issue