世界を動かす技術を、日本語で。

午前2時と午前3時のcronジョブを避ける (2013)

2025年10月28日原文(endpointdev.com)

概要

  • cronジョブ のスケジュール時刻に関する注意点
  • サマータイム(DST) による予期せぬ挙動のリスク
  • vixie-cron での具体的なトラブル事例
  • 回避策 やベストプラクティスの提案
  • 根本的解決策 への提言

cronジョブとサマータイムの落とし穴

  • 日曜日午前2時または3時 にcronジョブを設定しない注意喚起
  • サマータイム(DST) の切り替え時にジョブが異常動作するリスク
  • 他の曜日 でも、設定変更により日曜に移る可能性を考慮
  • 大半の場合は正常動作 だが、年2回のDST切り替えで問題発生
  • 具体例 :Linuxの vixie-cron で、DST開始時に3:00〜3:01の間ジョブが1秒ごとに約60回実行
  • 複数ジョブが重複実行 し、メール通知等で混乱発生の事例
  • 深刻な被害は回避 できたが、タスク内容によっては重大な障害につながる懸念

回避策とベストプラクティス

  • より高度なジョブスケジューラ (重複防止やタイムリミット指定可能)の導入検討
    • 例: systemd timers, Airflow, Fugue, Quartz Scheduler など
  • cronの普及度 を考慮し、現状では一部環境でcron利用が避けられない現実
  • サーバーのタイムゾーンをUTC に設定し、DSTの影響を排除する手段
  • 最も推奨 :サンデー午前2時・3時のcronジョブ設定自体を避ける運用ルール
  • 根本解決案 :世界的にサマータイム制度の廃止を提案

まとめ

  • cronジョブのスケジューリング はサマータイム切替時刻を避けることが重要
  • 運用ポリシー として、日曜午前2時・3時のジョブ設定禁止を徹底
  • より安全な運用 のためのツール導入やタイムゾーン設定の見直し推奨
  • 制度的課題 としてサマータイム廃止を望む声も存在

Hackerたちの意見

僕が働いてたところは、サーバーがUTCじゃなくてBSTに設定されてて、レポート用にcronジョブをめっちゃ使ってたんだ。これが年に2回、混乱を引き起こして、また年に2回ビジネスにその理由を説明しなきゃいけなかった。結局、修正される前に会社は潰れちゃったよ。ほんと、UTCを使った方がいいよ、特に理由がない限りはね。

「うちの顧客はUTCにいない」っていうのは、よくある説得力のある理由だよね。人々は一般的に、使用制限が夜中にリセットされることを期待してるから、UTCの真夜中じゃなくてさ。これらはしばしばバッチジョブの結果に暗黙的に結びついてるし。請求を含む金融関連のジョブも大きなカテゴリーだね。

Marin Softwareでは、各顧客ごとにサーバーを分けて、顧客が定義したタイムゾーンに設定してたんだ。もう終わりのないcronジョブの悪夢だったよ。今は彼らも破産しちゃった。最近、誰かが会社を再起動しようとしてるって聞いた。頑張ってほしいね。 https://x.com/Austen/status/1981904435539280324

特定の時間に何が起こったかのレポートが欲しいときは、そのレポートを現地時間で必要なんだ。僕は、24時間運用管理チームから毎日8時UK時間にいろんなことのステータスレポートをもらってる。つまり、先週は0700UTCで、今週は0800UTCに実行されたってこと。これは運用イベントやシフト変更に基づいてるんだ。他にも、シドニーで0630から1630現地時間で運用されてるシステムがあって、これによってUKのシフトパターンと重なるメンテナンスウィンドウが週によって変わるけど、システムがUK時間で2130-0730の時もあれば、2030-0630の時も、1930-0530の時もあるんだ。UTCが「答え」ってわけじゃないよ。時にはUTC時間で動かしたい時もあれば、現地時間で動かしたい時もある。火曜日と木曜日の午前10時ロンドン時間に定期的な会議があるんだけど、これは季節によって変わるからUTCに保存できないんだ。タイムゾーンを保存して、アクションを起こさなきゃいけないんだよ。

「本当に理由がない限り、みんなUTCを使おうよ。もしチーム全体が太平洋時間にいるなら、ログを読むときに難しい計算をしなくて済むように、PTに近い時間を使うよ。アメリカにいるなら、アメリカの時間がいいな。計算が楽だから。」

デスクにUTC時間のアナログ時計を置いてるんだ。ログを変換するのにすごく役立ってるよ。

公開/本番サーバーにはUTCを使ってるけど、クローゼットのラックにあるホームラボサーバーは全部ローカルタイムにしてる。これでホームラボサーバーの時間を把握しやすくなるんだよね。ただし、データベースの挿入や更新の日時は常にUTCで保存してる。

基本的にはそうだけど、意外と重要なケースが多いから一般化するのが難しい。例えば、金融業界は市場の時間や規制の理由で気にすることが多いんだよね。

それに、cronは使わない方がいいよ。もっと洗練されたスケジューラーをアプリに組み込むか、既製品を使った方がいい。

どうやら、キューバやエジプト、レバノンみたいに、DSTの変更が真夜中に行われるタイムゾーンがあるらしいから、そこも気をつけてね! https://mas.to/@mpirnat/115395859892135002

タイムゾーンのルールには、いろんな面白いことがあるよ。

え、DSTの変更が真夜中に起こらないタイムゾーンってあるの?それは初耳だわ。この記事がやっと理解できた。02:00と03:00が特別な理由が何か気になってたんだ。ブラジルでは子供の頃から00:00から01:00、00:00から23:00にDSTが変わるのが普通だったから。もしかして、他の国では02:00から03:00にDSTが変わるところもあるのかな?

Hacker Newsで議論の続きを見る