概要
systemd の timedatectl コマンドは、システムクロックとタイムゾーンの管理だけでなく、NTP(Network Time Protocol)による時刻同期の状態を確認する機能も提供します。その中でも timedatectl show-timesync は、NTP クライアント(systemd-timesyncd など)の詳細情報を JSON 形式で出力する便利なサブコマンドです。
基本的な使い方
コマンドは以下のように実行します。
timedatectl show-timesync
実行すると、現在有効なタイムサーバーや同期状態、最新のオフセット情報などがキーとバリューのペアで表示されます。
主な出力項目
- ServerName:現在使用中の NTP サーバーのホスト名またはアドレス。
- ServerAddress:サーバーの IP アドレス。
- ServerPollIntervalUSec:次回のポーリングまでの間隔(マイクロ秒)。
- ServerAccuracyUSec:サーバーが報告する最大誤差(マイクロ秒)。
- ServerLeap:サーバーのうるう秒情報(“yes”, “no”, “unknown”)。
- NTPSynchronized:
yesであれば時刻が NTP と同期中。 - NTPSyncTimeUSec:最後に同期が成功した時刻(UNIX epoch マイクロ秒)。
- TimeUSec:現在のシステム時刻(UNIX epoch マイクロ秒)。
- RTCTimeUSec:ハードウェア時計(RTC)の時刻。
出力例
ServerName=ntp.ubuntu.com
ServerAddress=91.189.94.4
ServerPollIntervalUSec=64000000
ServerAccuracyUSec=1000000
ServerLeap=no
NTPSynchronized=yes
NTPSyncTimeUSec=1722456789123456
TimeUSec=1722456890123456
RTCTimeUSec=1722456889123456
上記は改行で区切られた key=value 形式ですが、--output=json オプションを付与すれば JSON に変換できます。
JSON 形式で取得する方法
timedatectl show-timesync --output=json
出力例:
{
"ServerName": "ntp.ubuntu.com",
"ServerAddress": "91.189.94.4",
"ServerPollIntervalUSec": "64000000",
"ServerAccuracyUSec": "1000000",
"ServerLeap": "no",
"NTPSynchronized": "yes",
"NTPSyncTimeUSec": "1722456789123456",
"TimeUSec": "1722456890123456",
"RTCTimeUSec": "1722456889123456"
}
実務での活用例
- 監視スクリプトで
NTPSynchronizedがyesか確認し、同期が外れた場合にアラートを上げる。 - 定期的に
ServerOffsetUSec(存在すれば)を取得し、サーバーとの時刻ズレを数値化してログに残す。 - 複数のサーバーを使用している環境では、
ServerNameとServerAddressを比較し、DNS の切り替えが正しく機能しているか検証する。
よくある質問
1. 出力に期待した項目が無い場合は?
systemd のバージョンや使用している NTP デーモン(systemd-timesyncd, chrony, ntpd など)により取得できるフィールドが異なります。systemctl status systemd-timesyncd でサービスが有効か確認し、必要に応じてパッケージをアップデートしてください。
2. NTP サーバーを手動で変更したい
設定は /etc/systemd/timesyncd.conf の [Time] セクションで FallbackNTP= もしくは NTP= にサーバーリストを記述し、systemctl restart systemd-timesyncd で反映させます。その後 timedatectl show-timesync で新しいサーバーが反映されたか確認できます。