Cron Parser
Paste a cron expression to get a plain-English description, the next 10 run times, and per-field explanations. Common templates included.
📖 Cron syntax
- •
*— any value - •
5,10,15— list - •
1-5— range - •
*/15— step (every 15) - •
@hourly @daily @weekly @monthly @yearly— aliases
📖 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)?
For complex expressions?
Timezone?
🔗 Related Tools
🐛 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.
Thanks for your report!
Your report has been delivered to the operator and will be used to improve the tool.