変更要約: 初版(主題1.09・副主題1.09.1〜1.09.3に対応)
4.1システム時刻の管理
システム時刻の維持と同期を学びます。date とハードウェアクロック(hwclock)、タイムゾーンの設定(/usr/share/zoneinfo/・/etc/localtime・/etc/timezone・TZ・tzselect・timedatectl)、NTP による時刻同期(ntpd・ntpdate・ntpq・chronyd・chronyc・pool.ntp.org)を押さえます。
ログの突き合わせ・証明書の検証・認証——正確な時刻はあらゆる運用の前提です。Linux には2つの時計(OS が刻むシステムクロックと、マザーボード上のハードウェアクロック)があり、これを NTP でインターネットの正確な時刻源に揃えるのが基本形です。
4.1.12つの時計とタイムゾーン
- date=システムクロックの表示・設定(
date/書式指定date +%Y-%m-%d)。hwclock=ハードウェアクロックの参照・同期(hwclock --systohc=システム→ハードへ書き込み・--hctosysは逆)。 - タイムゾーンの実体=/usr/share/zoneinfo/ 配下のファイル。/etc/localtime をそこへのシンボリックリンクにするのが設定の実装(Debian 系は /etc/timezone にも名前を記録)。
- 設定手段=timedatectl(systemd 環境の統合コマンド。
timedatectl set-timezone Asia/Tokyo・状態表示も)/対話選択=tzselect/一時的な切り替え=環境変数 TZ(TZ=UTC date)。
4.1.2NTP による時刻同期
- NTP=ネットワーク経由で時刻源と同期するプロトコル(UDP/123)。公開時刻源の定番=pool.ntp.org(世界中のサーバー群を DNS で分散提供)。
- 伝統系=ntpd(常駐して徐々に補正・設定は ntp.conf)・ntpdate(一回きりの即時合わせ・非推奨化)・ntpq(
ntpq -pで同期状態・参照先を確認)。 - 現行主流=chronyd(不安定な回線・仮想環境に強い後継デーモン・設定は chrony.conf)と管理ツール chronyc(
chronyc sourcesで参照先確認)。
「hwclock --systohc=システム→ハードウェアへ書き込み(向きを問う)」「タイムゾーン設定=timedatectl set-timezone(実体は /etc/localtime のリンク)」「常駐で徐々に補正=ntpd/chronyd・一回きり=ntpdate」「同期状態の確認=ntpq -p/chronyc sources」 が定番です。NTP のポート UDP/123 は 1.07 のポート問題としても再登場します。
2つの時計の関係を運用の流れで押さえましょう。電源投入時、OS はハードウェアクロック(電池で動き続ける)から時刻を読み込んでシステムクロックを初期化します。以後 OS が刻むのはシステムクロックで、NTP デーモンが補正するのもシステムクロック側です。だからシャットダウン前や大きく合わせ直した後は hwclock --systohc でハードウェア側へ書き戻す運用が伝統でした(systemd 環境では自動化されています)。ntpd/chronyd が「徐々に」補正する(slew)のには理由があります——時刻が逆行すると、ログの順序が狂い、cron の実行が飛び/重複し、データベースが誤動作しかねないからです。だから稼働中のサーバーで ntpdate のような一発合わせを使うのは危険で、選択肢としても「稼働中システムには常駐デーモンで徐々に」が正解筋になります。仮想マシンではホスト側のスケジューリングの影響で時計が狂いやすく、chrony が推奨という文脈も覚えておくと安心です。
| 目的 | コマンド | 要点 |
|---|---|---|
| システム時刻の表示/設定 | date / timedatectl | timedatectl は統合管理 |
| システム→ハードへ書き込み | hwclock --systohc | --hctosys は逆向き |
| タイムゾーン変更 | timedatectl set-timezone | 実体は /etc/localtime リンク |
| 同期状態の確認 | ntpq -p / chronyc sources | 参照先と到達性が見える |
ひっかけ: 「hwclock --systohc はハードウェアクロックの値をシステムに反映する」は誤りです(それは --hctosys。systohc=system to hardware clock と読み解く)。また「稼働中の本番サーバーの時刻ずれは ntpdate で即時修正するのが最善」も誤り=時刻の急変(特に逆行)は運用事故のもとで、常駐デーモンによる漸進補正が正解です。
4.1.3この節のまとめ
- システムクロック(date/timedatectl)⇔ ハードウェアクロック(hwclock・--systohc の向き)。ゾーンは zoneinfo→/etc/localtime リンク
- 同期=常駐 ntpd/chronyd(漸進補正)・時刻源は pool.ntp.org・確認は ntpq -p/chronyc sources
進捗の記録にはログインが必要です。
理解度チェック
(軽い確認用)Q1. NTP で合わせたシステムクロックの時刻を、ハードウェアクロックに書き込みたい。適切なコマンドは?
Q2. systemd 環境のサーバーのタイムゾーンを Asia/Tokyo に恒久設定したい。適切なコマンドは?
Q3. 稼働中の本番データベースサーバーの時刻が数分ずれている。対処として最も適切なのはどれ?

