Avoid 2:00 and 3:00 am cron jobs (2013)
UTC vs local time on servers
- Strong support for setting server clocks to UTC and converting to local time only at display or application level.
- Counterpoint: for teams and systems that are strictly local (e.g., all-Pacific or single-HQ enterprises), local server time can simplify reading raw logs and business reasoning.
- Several war stories where non‑UTC server time and per‑customer timezones caused recurring DST chaos; some organizations never fully fixed it.
Business requirements: “local midnight”, quotas, and reports
- Many jobs are tied to human expectations: daily quotas at “midnight”, reports at “8am local”, market/regulatory cutoffs, shift-based operations.
- UTC scheduling doesn’t remove the need to decide what happens on days with 23 or 25 hours or duplicated times (e.g., 01:30 occurs twice).
- Suggestions include:
- Rolling windows for quotas (e.g., last 24h) instead of calendar days.
- Treating “run once per local day” as a business rule that must explicitly define behavior on DST transition days.
Cron, DST, and scheduler behavior
- Core article’s bug was in vixie‑cron; some distros (e.g., Debian) added logic long ago to avoid double/zero runs across small clock changes.
- Other cron variants (busybox, systemd timers) behave differently; some handle DST better, some are naive.
- Several argue for avoiding cron entirely and using application‑level schedulers that are timezone/DST‑aware and user‑configurable.
Operational scheduling practices
- Common advice:
- Avoid 02:00–03:00 in DST zones; also avoid 00:00 and on‑the‑hour times to reduce ambiguity and contention.
- Use odd minutes and randomized delays (or systemd’s RandomizedDelaySec / FixedRandomDelay) to spread load.
- For “once per day” logic, some propose hourly cron + “has the day changed?” checks, though others see this as re‑implementing a scheduler.
- anacron is recommended for “sometimes on” machines; it locks jobs and avoids double runs.
Logs, tooling, and human factors
- Many prefer logs in UTC for cross‑team correlation; others like local timestamps for fast mental parsing.
- Compromise patterns:
- Store UTC (possibly with Unix timestamps) and attach or derive a local representation at view time.
- Use tools/wrappers (e.g., tztail‑style) to convert while tailing.
- Frustration with UIs that mix timezones, infer format from browser locale, or make UTC/24h usage harder than necessary.
Concurrency, robustness, and idempotency
- Multiple comments stress that overlapping jobs are a more general problem than DST:
- Use lockfiles/flock, semaphores, or idempotent job design so double runs are safe.
- Treat downtime and restarts as cases where “once per day” semantics must still hold.
DST, timezones, and broader debates
- Widespread dislike of DST; recurring arguments over permanent standard vs permanent summer time, or abolishing timezones vs keeping them.
- Some point out that any “simple” replacement has already been tried somewhere and produced its own issues.
- Technical purists mention TAI and leap seconds, but others note the interoperability cost when the rest of the world uses UTC.