SheepDev

Date, time, and schedules

Check a weekday cron schedule from 09:00 through 17:59

Tools to use

You want a backup on weekday mornings. Pasting a Cron expression looks easy, but recognizing five fields is not the same as verifying the intended dates. Adding a weekday can unexpectedly add execution days; excluding a candidate equal to the start can look like a bug. Read the expression, then inspect real dates.

Start with three weekday mornings

Unix five fields: minute, hour, day, month, weekday
0 9 * * 1-5

Enter the expression, choose Asia/Tokyo, start at 2024-01-05T00:00:00Z, and request three candidates. The start is Friday 09:00 in Tokyo. Results are January 8, 9, and 10 at 00:00:00Z: Monday through Wednesday at 09:00 Tokyo. Z means UTC, not a mistaken midnight schedule.

This excludes weekends, not public holidays. Even if January 8 is a holiday locally, the expression still matches. Decide whether 'weekday' means Monday–Friday or a business calendar. Holiday exclusions need an additional rule in the execution system; a business-day calculation can help check the dates.

The exact start is excluded

Candidates must be strictly after the start. Friday 09:00 matches the expression but is excluded when it equals the start. Move the start back one second to 2024-01-04T23:59:59Z and the first candidate becomes January 5 at 00:00:00Z. Distinguish an inclusive list from the next occurrence.

For a reproducible report, include the zone and a fixed start alongside the expression. 'Ten from now' changes with the tester and day. Start just before a month or weekday boundary to expose the suspected behavior in a short list.

The first of the month AND Monday? Not here

Both day-of-month and weekday specified
0 9 1 * 1

In this tool, that expression matches 09:00 on the first of each month OR Monday. From 2024-05-31T00:00:00Z in UTC, candidates include Saturday June 1, Monday June 3, and Monday June 10. It does not mean only months whose first day is Monday. Adding a condition does not always narrow a Cron schedule.

Weekday 0 and 7 mean Sunday; 1 means Monday. This tool rejects named months/weekdays, L, #, ?, six-field expressions with seconds, and provider-specific formats. Do not mechanically remove an extra field when migrating: identify seconds or years in the source specification, then express the supported schedule deliberately.

*/20 is not twenty minutes since the last run

Minutes 0, 20, and 40 of each hour
*/20 * * * *

Starting at 09:07 gives 09:20 next, not 09:27. Cron matches field values; it is not a timer waiting after the previous completion. A 25-minute job does not automatically delay the next candidate. Overlap prevention, retries, and missed schedules belong to the execution system.

Read daylight-saving candidates back in local time

For 0 2 * * * in America/New_York, start at 2024-03-09T08:00:00Z. This tool's first candidate is 2024-03-10T07:00:00Z, which is 03:00 locally. Its parser handles the missing 02:00 this way. The following day is 06:00:00Z, back to local 02:00. Do not generalize that every scheduler skips missing times.

When autumn repeats a clock time, check whether the target scheduler runs once or twice. These are library-generated candidates, not guarantees for server Cron, cloud schedulers, or job managers. Fixing UTC can shift local time; fixing local time can change elapsed spacing. Choose according to the operational requirement.

Keep a review note before registering the schedule

Check an ordinary week, month-end, and offset transition using separate fixed starts. The tool permits up to 100 candidates within five calendar years. A search-limit error is not a successful empty schedule; revisit the expression and interval. Requesting 100 annual occurrences exceeds this inspection scope.

Record the expression, zone, start, first expected occurrences, holiday policy, and overlap handling together. SheepDev neither registers a job nor executes a command. Use it to turn an assumption into a small concrete case, then check the actual execution environment.

Ten upcoming runs may miss a month-end gap

The expression 0 9 31 * * means day 31, not an automatic fallback to the last day of shorter months. Inspect candidates across February and April rather than assuming month-end behavior. Same day of month, last day of month and thirty days after the previous run are different schedules. Do not substitute a similar-looking expression when the supported five-field syntax cannot express the intended rule.

A correct every-minute sequence also says nothing about overlap when work takes longer than a minute. Waiting, skipping or running concurrently are scheduler policies, not properties of the expression. Separate candidate-time validation from locking and retry design. Correct cron syntax does not prove completion or safe replay after failure.

Keep fixed-start examples for a normal week, month and year boundaries, and relevant DST transitions. Testing only 'from now' changes the evidence each day. Fixed start times and zones enable regression checks. If the bounded search finds nothing, report that search range rather than claiming the expression can never run.

Sources

Tools to use

Guides →