A Day-31 Cron Schedule Is Not the Same as Month End

A Day-31 Cron Schedule Is Not the Same as Month End — Cron Helper concept illustration

This is a guide to Cron Helper, a tool I develop and operate.

The handoff note says “monthly close”. The configuration contains the expression below. There is a record for October and none for November. Before calling it a failed run, compare the business description with the dates the expression actually selects.

0 2 31 * *

This walkthrough uses Cron Helper to review upcoming dates. It does not connect to the server, run the batch or change its configuration.

Bring the schedule, not production secrets

Start with the expression alone. There is no need to paste a real command containing account names, paths or tokens into a shared example. The app can interpret a line that includes a command, but one schedule at a time makes the scope of your review clear.

Look for the missing month

  1. Enter the expression and select UTC.
  2. Check five-field format in the advanced options and use 2026-10-17 00:00 as the starting point.
  3. Display five runs and compute the result.

The checked list showed October 31 and December 31, 2026; January 31, March 31 and May 31, 2027, at 02:00 UTC. November and February are absent because they have no day 31. The expression does not automatically move to the last available day.

Rewrite the requirement before rewriting the cron

Does month end mean the last calendar date, the last business day, or an earlier deadline when that date is a holiday? Those are different requirements. A range covering days 28–31 is not a substitute for one execution on the last day; it can select several dates.

Support for last-day syntax or conditional handling depends on the target scheduler. A generic preview is not certification of a product’s extension syntax. Identify the actual scheduler and version before preparing the change.

Separate a schedule finding from a runtime failure

A useful handoff can be short: “Requirement: month end. Current schedule: day 31 at 02:00 UTC. Months without day 31 have no scheduled occurrence. Business rule needs confirmation.” That gives the next person a precise discrepancy to resolve.

No scheduled occurrence and a scheduled execution that failed are separate findings. Runtime failure needs evidence from the actual job, its environment and logs. A next-run calculator cannot supply that evidence.

Compare the field semantics with the Cronie crontab documentation. None of the review steps here executes the command.

Preview the next dates for one inherited schedule.

Day-31 schedule showing skipped months — English interface
Actual app interface, checked on October 17, 2026. The list changes with the selected starting time.
Scroll to Top