状況
告知は「10/20 02:00〜03:00(JST)にメンテナンス」。サーバーのタイムゾーンは UTC。停止を cron で予約する手順を確認している。
ダブルチェッカーとして最初に止めるべき点は?
1. 告知: 10/20 02:00〜03:00(JST)にサービスを停止2. crontab に次の 1 行を追加する 0 2 20 10 * /opt/app/bin/maintenance on3. 03:00 に手動で maintenance off を実行する正答
- cron の月は 0 始まりなので、10 と書くと 11 月に実行される
- サーバーは UTC なので 02:00 は日本時間 11:00。日中に止まる
- この書き方では毎年 10/20 に実行されるので、作業後に消す手順が要る
- 3 の解除も手動ではなく cron で予約すべき
解説
cron はサーバーのタイムゾーンで時刻を解釈する。UTC のサーバーで 02:00 と書くと日本時間 11:00 に実行され、告知していない日中にサービスが止まる。JST 02:00 にしたいなら UTC では前日 10/19 の 17:00(0 17 19 10 *)。cron の月は 1〜12 なので 1 番目は誤り。毎年実行される点は実在する問題だが、作業後に消せば済み、告知と違う時間に本番を止める誤りより優先度は低い。
参考: man7.org
この問題を含む 危険察知 のテストを制限時間つきで解く
危険察知クイズへ