「Systemd-timesyncd」の版間の差分
Kusanaginoturugi (トーク | 投稿記録) (関連ページを修正) |
Kusanaginoturugi (トーク | 投稿記録) (→使い方: == Configuration == を追加) |
||
14行目: | 14行目: | ||
:''systemd-timesyncd'' はネットワークを介してシステム時刻を同期させるために追加されたデーモンです。SNTP クライアントが実装されています。chrony や NTP リファレンスサーバーなどの NTP 実装とは対照的に、timesyncd はクライアント側しか実装しておらず、完全な NTP の複雑性に悩むことなく、リモートサーバーに時刻を問い合わせてそれにローカルクロックを同期させることだけに焦点を置いています。NTP をネットワークのクライアントに提供したりローカルのハードウェアクロックに接続したいのでなければ、このシンプルな NTP クライアントだけでほとんどの場合は十二分に間に合います。デーモンは最小権限で動作し、networkd と紐付けられることでネットワーク接続が有効なときだけ同期を行います。Raspberry Pi や組み込みデバイスなどの RTC を載せてないシステムのために、新しい NTP の同期が取得される度にディスクに現在の時刻を保存し、それを使って起動時にシステム時刻を修正することができ、時刻が常に正しいわけではないときでも、それらのシステムで時刻がモノトニックに進むことを保証します。このデーモンを利用するには systemd のインストール時に新しいユーザーとグループ "systemd-timesync" を作る必要があります。 |
:''systemd-timesyncd'' はネットワークを介してシステム時刻を同期させるために追加されたデーモンです。SNTP クライアントが実装されています。chrony や NTP リファレンスサーバーなどの NTP 実装とは対照的に、timesyncd はクライアント側しか実装しておらず、完全な NTP の複雑性に悩むことなく、リモートサーバーに時刻を問い合わせてそれにローカルクロックを同期させることだけに焦点を置いています。NTP をネットワークのクライアントに提供したりローカルのハードウェアクロックに接続したいのでなければ、このシンプルな NTP クライアントだけでほとんどの場合は十二分に間に合います。デーモンは最小権限で動作し、networkd と紐付けられることでネットワーク接続が有効なときだけ同期を行います。Raspberry Pi や組み込みデバイスなどの RTC を載せてないシステムのために、新しい NTP の同期が取得される度にディスクに現在の時刻を保存し、それを使って起動時にシステム時刻を修正することができ、時刻が常に正しいわけではないときでも、それらのシステムで時刻がモノトニックに進むことを保証します。このデーモンを利用するには systemd のインストール時に新しいユーザーとグループ "systemd-timesync" を作る必要があります。 |
||
+ | |||
+ | == Configuration == |
||
+ | |||
+ | [[Start/enable]] {{ic|systemd-timesyncd.service}} which is available with {{Pkg|systemd}}. |
||
+ | |||
+ | When starting, ''systemd-timesyncd'' will read the configuration file from {{ic|/etc/systemd/timesyncd.conf}}, which looks like this: |
||
+ | |||
+ | {{hc|/etc/systemd/timesyncd.conf|2= |
||
+ | [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 [[Network Time Protocol daemon#Connection to NTP servers|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 [https://www.pool.ntp.org/ the NTP pool project] or use [https://github.com/archlinux/svntogit-packages/commit/1b485f87c9e1384eaf069d031e415515e8ead92d the default Arch ones] (also provided by the NTP pool project): |
||
+ | |||
+ | {{hc|/etc/systemd/timesyncd.conf|2= |
||
+ | [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: |
||
+ | |||
+ | {{hc|$ timedatectl show-timesync --all|2= |
||
+ | 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#%5BNetDev%5D section|systemd-networkd]] configuration with a {{ic|1=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 {{man|8|systemd-networkd.service}} configuration or via DHCP take precedence. |
||
+ | * The NTP servers defined in {{ic|/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 {{ic|1=FallbackNTP=}} will be used. |
||
+ | |||
+ | {{Note|The service writes to a local file {{ic|/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.}} |
||
== 使い方 == |
== 使い方 == |
2022年11月14日 (月) 17:17時点における版
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.
使い方
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 で利用可能な systemd-timesyncd.service
を 起動・有効化 します。
起動すると、systemd-timesyncd は /etc/systemd/timesyncd.conf
から構成ファイルを読み取ります。これは次のようになります。
/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 #RootDistanceMaxSec=5 #PollIntervalMinSec=32 #PollIntervalMaxSec=2048
時刻サーバーを追加したり変更するには、適当な行をアンコメントして、空白で区切られたホスト名か IP を記述してください。例えば、NTP プールプロジェクト によって提供されているサーバーやデフォルトの Arch のサーバーを使うことができます (こちらも NTP プールプロジェクトによって提供されています):
/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.jp.pool.ntp.org
構成を確認するには、timedatectl show-timesync --all
を使用します。
$ 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
デーモンの設定だけでなく、systemd-networkd の設定の NTP=
オプションを使ったり、動的に、DHCP サーバーを使うことで提供される NTP サーバーもあります (systemd 216 から)。
使用される NTP サーバーは以下のルールによって決まります:
systemd-networkd.service(8)
の設定や DHCP によるインターフェイスごとの NTP サーバーが優先されます。/etc/systemd/timesyncd.conf
に定義された NTP サーバーは実行時にインターフェイスごとのリストに追加され、デーモンはサーバーのどれかが応答するまで通信を行います。- 以上の手順を踏んでも NTP サーバーの情報がまったく得られなかったとき、
FallbackNTP=
に定義された NTP サーバーのホスト名や IP アドレスが使われます。
トラブルシューティング
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 によって並行して管理されている場合、up
、dhcp4-change
, dhcp6-change
、および down
アクションが任意の順序で発生する可能性があるため、 config は上書きされません。