systemd-timesyncd

提供: ArchWiki
2022年11月14日 (月) 17:18時点におけるKusanaginoturugi (トーク | 投稿記録)による版 (→‎設定: 移動のため削除)
ナビゲーションに移動 検索に移動

関連記事

systemd メーリングリスト より:

systemd-timesyncd はネットワークを介してシステム時刻を同期させるために追加されたデーモンです。SNTP クライアントが実装されています。chrony や NTP リファレンスサーバーなどの NTP 実装とは対照的に、timesyncd はクライアント側しか実装しておらず、完全な NTP の複雑性に悩むことなく、リモートサーバーに時刻を問い合わせてそれにローカルクロックを同期させることだけに焦点を置いています。NTP をネットワークのクライアントに提供したりローカルのハードウェアクロックに接続したいのでなければ、このシンプルな NTP クライアントだけでほとんどの場合は十二分に間に合います。デーモンは最小権限で動作し、networkd と紐付けられることでネットワーク接続が有効なときだけ同期を行います。Raspberry Pi や組み込みデバイスなどの RTC を載せてないシステムのために、新しい NTP の同期が取得される度にディスクに現在の時刻を保存し、それを使って起動時にシステム時刻を修正することができ、時刻が常に正しいわけではないときでも、それらのシステムで時刻がモノトニックに進むことを保証します。このデーモンを利用するには systemd のインストール時に新しいユーザーとグループ "systemd-timesync" を作る必要があります。

Configuration

Start/enable systemd-timesyncd.service which is available with systemd.

When starting, systemd-timesyncd will read the configuration file from /etc/systemd/timesyncd.conf, which looks like this:

/etc/systemd/timesyncd.conf
[Time]
#NTP=
#FallbackNTP=0.arch.pool.ntp.org 1.arch.pool.ntp.org 2.arch.pool.ntp.org 3.arch.pool.ntp.org
#...

To add time servers or change the provided ones, uncomment the relevant line and list their host name or IP separated by a space. For example, you can use any servers provided by the NTP pool project or use the default Arch ones (also provided by the NTP pool project):

/etc/systemd/timesyncd.conf
[Time]
NTP=0.arch.pool.ntp.org 1.arch.pool.ntp.org 2.arch.pool.ntp.org 3.arch.pool.ntp.org
FallbackNTP=0.pool.ntp.org 1.pool.ntp.org 0.fr.pool.ntp.org

To verify your configuration:

$ timedatectl show-timesync --all
LinkNTPServers=
SystemNTPServers=
FallbackNTPServers=0.arch.pool.ntp.org 1.arch.pool.ntp.org 2.arch.pool.ntp.org 3.arch.pool.ntp.org
ServerName=0.arch.pool.ntp.org
ServerAddress=103.47.76.177
RootDistanceMaxUSec=5s
PollIntervalMinUSec=32s
PollIntervalMaxUSec=34min 8s
PollIntervalUSec=1min 4s
NTPMessage={ Leap=0, Version=4, Mode=4, Stratum=2, Precision=-21, RootDelay=177.398ms, RootDispersion=142.196ms, Reference=C342F10A, OriginateTimestamp=Mon 2018-07-16 13:53:43 +08, ReceiveTimestamp=Mon 2018-07-16 13:53:43 +08, TransmitTimestamp=Mon 2018-07-16 13:53:43 +08, DestinationTimestamp=Mon 2018-07-16 13:53:43 +08, Ignored=no PacketCount=1, Jitter=0 }
Frequency=22520548

Further to the daemon configuration, NTP servers may also be provided via a systemd-networkd configuration with a NTP= option or, dynamically, via a DHCP server.

The NTP server to be used will be determined using the following rules:

  • Any per-interface NTP servers obtained from systemd-networkd.service(8) configuration or via DHCP take precedence.
  • The NTP servers defined in /etc/systemd/timesyncd.conf will be appended to the per-interface list at runtime and the daemon will contact the servers in turn until one is found that responds.
  • If no NTP server information is acquired after completing those steps, the NTP server host names or IP addresses defined in FallbackNTP= will be used.
ノート: The service writes to a local file /var/lib/systemd/timesync/clock with every synchronization. This location is hard-coded and cannot be changed. This may be problematic for running off read-only root partition or trying to minimize writes to an SD card.

使い方

systemd-timesyncd サービスは systemd 213 から利用することができます。サービスを起動・有効化するには:

# timedatectl set-ntp true

サービスの状態を確認したいときは、timedatectl status を使います:

$ timedatectl status
Local time: Thu 2015-07-09 18:21:33 CEST
Universal time: Thu 2015-07-09 16:21:33 UTC
RTC time: Thu 2015-07-09 16:21:33
Time zone: Europe/Amsterdam (CEST, +0200)
Network time on: yes
NTP synchronized: yes
RTC in local TZ: no

詳細なサービス情報を表示するには、 timedatectl timesync-status を使います:

$ timedatectl timesync-status
       Server: 103.47.76.177 (0.arch.pool.ntp.org)
Poll interval: 2min 8s (min: 32s; max 34min 8s)
         Leap: normal
      Version: 4
      Stratum: 2
    Reference: C342F10A
    Precision: 1us (-21)
Root distance: 231.856ms (max: 5s)
       Offset: -19.428ms
        Delay: 36.717ms
       Jitter: 7.343ms
 Packet count: 2
    Frequency: +267.747ppm
ヒント: systemd 216 以前は systemd-timesyncd を使うにはネットワークの起動・停止イベントを拾うために systemd-networkd を起動させる必要がありました (ただし設定は不要)。現在はこの仕様は変更されており、dhcpcdNetworkManager からのイベントも受信します。ネットワークの設定に依存するかネットワーク管理ツールを使わなくてはならないのは変わっていません。

トラブルシューティング

systemd 242.0-1 に更新後 systemd-timesyncd の起動に失敗する

ログにこのエラーが表示される場合

ExecStart=/usr/lib/systemd/systemd-timesyncd (code=exited, status=238/STATE_DIRECTORY)

次のコマンドを実行して、問題を修正します。

# rm -rf /var/lib/systemd/timesync
# rm -rf /var/lib/private/systemd/timesync

FS#62161 を参照してください。

DHCP 経由で受信した NTP サーバーを動的に設定

前提:

  • システムクロックは、systemd-timesyncd によってNTPサーバーと同期されます。
  • ネットワークは NetworkManager によって設定されます。

異なるネットワーク (会社の LAN、自宅の Wi-Fi、その他のさまざまな Wi-Fi など) 間をローミングする場合は、timesyncd で使用される NTP サーバーを DHCP で提供されるサーバーに設定することをお勧めします。 systemd-networkd とは異なり、NetworkManager は systemd-timesyncd と通信してNTPサーバーを設定することはできません。

NetworkManager dispatcher で解決する場合 (以下のすべてのアクションはrootとして実行する必要があります。したがって、sudo -i を使用してルートシェルを起動するか、すべてのコマンドの前に sudo を追加します。)

まだ存在していない場合は、systemd-timesyncd 構成のオーバーレイディレクトリ /etc/systemd/timesyncd.conf.d を作成します。 また、まだ存在していない場合は、ディレクトリ /etc/NetworkManager/dispatcher.d を作成します。 次の dispatcher スクリプトをそこに配置します

/etc/NetworkManager/dispatcher.d/10-update-timesyncd
#! /usr/bin/bash

[ -n "$CONNECTION_UUID" ] || exit

INTERFACE=$1
ACTION=$2

case $ACTION in
    up | dhcp4-change | dhcp6-change)
        [ -n "$DHCP4_NTP_SERVERS" ] || exit
        exec > /etc/systemd/timesyncd.conf.d/$CONNECTION_UUID.conf
        echo "[Time]"
        echo "NTP=$DHCP4_NTP_SERVERS"
        systemctl restart systemd-timesyncd
        ;;
    down)
        rm -f /etc/systemd/timesyncd.conf.d/$CONNECTION_UUID.conf
        systemctl restart systemd-timesyncd
        ;;
esac

このスクリプトを、 chmod 700 10-update-timesync を使用して root でのみ実行可能にします。最後に、 NetworkManager dispatcher が有効になっていて起動していることを確認してください。

では、ここで何が起こるのでしょうか? NetworkManager が新しいネットワーク接続をセットアップするか (ACTION=up) または既存の接続の更新を取得するたび (ACTION=dhcp4-change または ACTION=dhcp6-change) 提供された接続データにはNTP サーバーに関する情報が含まれます (DHCP4_NTP_SERVERS) 次に、接続固有のオーバーレイ設定ファイルが、提供された NTP サーバーを含む /etc/systemd/timesyncd.conf.d に書き込まれます。接続が切断されると (ACTION=down) 接続固有のオーバーレイファイルが再び削除されます。 systemd-timesyncd の設定を変更するたびに、このサービスが再起動され、更新された設定が取得されます。接続固有の設定ファイルの使用は意図的なものであるため、2つ以上の接続が NetworkManager によって並行して管理されている場合、updhcp4-change, dhcp6-change 、および down アクションが任意の順序で発生する可能性があるため、 config は上書きされません。

参照