Type a cron expression and see what it means in plain English, along with the next five times it will run.
Runs are computed in your browser, in this device's timezone (UTC).
The five fields
A standard crontab entry has five fields followed by the command:
┌───────── minute (0-59) │ ┌─────── hour (0-23) │ │ ┌───── day of month (1-31) │ │ │ ┌─── month (1-12) │ │ │ │ ┌─ day of week (0-6, Sunday is 0) │ │ │ │ │ * * * * * command_to_run
Each field accepts a single value, a range (9-17), a step (*/15), a list (1,15), or any combination. A few keywords are also understood: @hourly, @daily, @weekly, @monthly, @yearly and @reboot.
The day-of-month trap
This is the one that catches people out, and most calculators do not mention it. If you set both the day-of-month field and the day-of-week field to anything other than *, cron does not require both to match — it runs when either matches.
So 0 0 13 * 5 reads as “midnight on Friday”, but it actually means “midnight on the 13th, or on any Friday”. If you want the 13th only when it falls on a Friday, you cannot express that in a single crontab line — add a date check inside the command instead. The calculator flags the case whenever it applies.
Other things that go wrong
- Timezones. Cron runs in the server’s local time, not yours. The runs below are shown in this device’s timezone so you can see the difference — if the server is set to UTC and you are not, a job scheduled for 02:00 may not run when you expect.
- Environment. Cron jobs get a minimal environment and often a different
PATHthan your shell. A script that works when you run it by hand and fails under cron is almost always this. - Overlap. If a job takes longer than its interval, the next run starts before the previous one has finished. For anything doing real work, add a lock file.
- Silent failure. Cron mails output to the local mailbox, which nobody reads. Redirect output somewhere you will actually see it, or you will not know a backup stopped running six months ago.
Verify the schedule, not the syntax
A cron line can be perfectly valid and still not do what you meant. The next-five-runs list is the real check: if you expected a weekly job and you are seeing daily runs, you have your answer before you ever hit save.