Cron tools › Explain / Test
Cron schedule visualizer
A cron line is hard to picture. This draws it: which hours of which weekdays it fires in, how many runs land on each day of a month, and which months it runs at all — counted from the expression's fields, so even a once-a-second schedule draws instantly.
Week — runs per weekday and hour, next 4 weeks
Month
Year
Days with runs in each month. Select a month to open it in the calendar.
Try one
How to visualize a cron schedule
- Enter the expression and check the Dialect — it decides how the two day fields combine and how day-of-week numbers are read.
- Pick the Time zone the scheduler runs in. Everything is drawn in that zone's wall-clock time.
- Read the week heatmap: each cell is one hour of one weekday, shaded by how many runs start in it over the next four weeks. Hover or focus a cell for the exact count.
- Use ‹ Prev and Next › to step through months. Each day shows its number of runs; days marked DST are the days the clocks change.
- Scan the year strip for months with no runs at all — the usual sign of a day-of-month that some months do not have.
Patterns worth recognising
| Expression | What the picture shows |
|---|---|
| */15 9-17 * * 1-5 | A solid block Monday to Friday, 09:00 to 17:59. Each cell holds 4 runs per day, so 16 over four weeks. |
| 0 9 * * 1-5 | One column at 09:00, five cells tall — and an empty weekend. |
| 0 0 1-7 * 1 | Not "the first Monday". In Linux cron both day fields are set, so it runs on days 1 to 7 and on every Monday; the calendar shows it. |
| 0 0 */2 * 1 | In Linux cron, odd-numbered days that are Mondays (the * at the start makes cron AND the fields). Switch the dialect to Kubernetes and it becomes every odd day plus every Monday. |
| 0 0 31 * * | The year strip lights up only seven months: cron does not move day 31 to the last day of shorter months. |
| * 9 * * * | A single hot hour: sixty runs from 09:00 to 09:59, not one run at 09:00. |
How the counts are made
A cron schedule fires on a set of days, and on each of those days at every combination of its hours, minutes and seconds. The
visualizer counts exactly that — the days from the day fields (with L, W and # worked out
per month), times the size of the hour, minute and second sets — instead of listing every run, which is why
*/10 * * * * * (8,640 runs a day) draws as fast as a daily job. The heatmap and year strip count wall-clock time; on
the calendar, the days the clocks change are counted run by run, so a spring-forward day for an hourly job shows 23 runs.
For the exact list of times, use the next run calculator.
FAQ
Why is a cell empty when the job runs at that hour?
The heatmap covers the next four weeks only. A monthly or yearly job may have no run in that window; the summary under the heatmap then gives the date of the next run, and the calendar and year strip show when it does fire.
What do the DST marks on the calendar mean?
The clocks change that day in the selected zone. The count for that day is the real one: a job with * in its hour
field loses the skipped hour, and a fixed-time job in the skipped hour still runs once, just after the jump, as Vixie cron and
cronie do.
Is the schedule sent anywhere to draw this?
No. The counting runs in this page's JavaScript. The expression, dialect, zone and month are kept in the address bar after the
#, which browsers do not send to the server, so a copied link reopens the same view.