Skip to content

Reading and writing cron schedules

The five cron fields, common expression patterns, and the timezone and overlap issues that make scheduled jobs misfire.

A standard cron expression has five fields: minute, hour, day of month, month, and day of week. Each accepts a value, a list, a range, a step, or an asterisk meaning every value. That small grammar produces schedules that are compact to write and surprisingly easy to misread.

Patterns worth recognising

*/15 * * * * runs every fifteen minutes. 0 3 * * * runs at three in the morning. 0 9 * * 1-5 runs on weekday mornings. The awkward case is day-of-month combined with day-of-week, where many implementations treat the two as an OR rather than an AND.

Timezones decide when it really runs

Cron interprets wall-clock time, so the schedule depends on the timezone of the machine or scheduler configuration. Running in UTC removes daylight-saving ambiguity but shifts the local hour twice a year; pinning a local zone keeps the hour and inherits the transitions.

Overlap and idempotency

Nothing in cron prevents a run from starting while the previous one is still going. Long jobs need a lock, and every job should be safe to run twice, because a backward daylight-saving transition repeats an hour.

Read the expression before you deploy

Translate any unfamiliar schedule into plain language with Cron Explainer, check instants with Timestamp Converter, and weigh clock-based against elapsed-time scheduling in Cron vs Interval Scheduling.

Try related tools

Keep exploring