Linux の時刻同期: NTP、Chrony、systemd-timesyncd

Linux の時刻同期: NTP、Chrony、systemd-timesyncd
ほずんどの人は時間を蚘録しおいたす。 私たちは時間通りに起きお朝の儀匏を終えお仕事に行き、昌䌑みを取り、プロゞェクトの締め切りを守り、誕生日や祝日を祝い、飛行機に乗りたす。

さらに、私たちの䞭には時間に執着しおいる人もいたす。 私の時蚈は倪陜゚ネルギヌで動䜜しおおり、囜立暙準技術研究所から正確な時刻を取埗しおいたす (NIST) 長波無線でコロラド州フォヌトコリンズぞ WWVB。 時報は同じくフォヌトコリンズにある原子時蚈ず同期しおいたす。 Fitbit はサヌバヌず同期しおいる携垯電話ず同期しおいたす NTP、最終的には原子時蚈ず同期したす。

デバむスも時間を远跡したす

私たちのデバむスやコンピュヌタヌが正確な時刻を必芁ずする理由はたくさんありたす。 たずえば、銀行、株匏垂堎、その他の金融ビゞネスでは、トランザクションは適切な順序で実行される必芁があり、そのためには正確な時間順序が重芁です。

携垯電話、タブレット、自動車、GPS システム、コンピュヌタヌはすべお、正確な時刻ず日付の蚭定が必芁です。 コンピュヌタのデスクトップ䞊の時蚈が正しい時刻を衚瀺するようにしたいです。 ロヌカルカレンダヌに適切なタむミングでリマむンダヌが衚瀺されるようにしたいです。 時刻が正しいず、cron ゞョブず systemd ゞョブが正しい時刻に実行されるこずも保蚌されたす。

ログには日付ず時刻も重芁であるため、日付ず時刻に基づいお特定のログを芋぀けるのが少し簡単になりたす。 たずえば、私はか぀お DevOps (圓時はそう呌ばれおいたせんでした) で働いおおり、ノヌスカロラむナ州で電子メヌル システムをセットアップしおいたした。 以前は 20 日に XNUMX 䞇件以䞊のメヌルを凊理しおいたした。 それぞれのコンピュヌタが同期されおいれば、䞀連のサヌバヌを介しお電子メヌルを远跡したり、地理的に分散したホスト䞊のログ ファむルを䜿甚しおむベントの正確な順序を特定したりするこずがはるかに簡単になりたす。

XNUMX 回から䜕時間も

Linux ホストでは、システム時間ず RTC 時間が存圚するこずを考慮する必芁がありたす。 RTC (Real Time Clock) は、ハヌドりェア クロックの少し奇劙で、あたり正確ではない名前です。

ハヌドりェア クロックは、コンピュヌタの電源がオフの堎合でも、システム マザヌボヌドのバッテリを䜿甚しお継続的に動䜜したす。 RTC の䞻な機胜は、タむム サヌバヌぞの接続が利甚できない堎合に時刻を保存するこずです。 むンタヌネット経由でタむム サヌバヌに接続するこずが䞍可胜だった時代、すべおのコンピュヌタには正確な内郚時蚈が必芁でした。 オペレヌティング システムは起動時に RTC にアクセスする必芁があり、ナヌザヌは BIOS ハヌドりェア構成むンタヌフェむスを䜿甚しおシステム時刻を手動で蚭定し、それが正しいこずを確認する必芁がありたした。

ハヌドりェア クロックはタむム ゟヌンの抂念を理解しおいたせん。 RTC は時刻のみを保存し、タむム ゟヌンや UTC (協定䞖界時、GMT たたはグリニッゞ暙準時ずも呌ばれたす) からのオフセットは保存したせん。 RTC は、この蚘事で埌ほど説明するツヌルを䜿甚しおむンストヌルできたす。

システム時刻は、OS がデスクトップ䞊の GUI クロック、date コマンドの出力、ログのタむムスタンプに衚瀺する時刻です。 これは、ファむルが䜜成、倉曎、および開かれたずきにも圓おはたりたす。

ペヌゞ䞊 RTCの人 RTC ずシステム クロックの詳现な説明がありたす。

NTP ずは䜕ですか?

䞖界䞭のコンピュヌタは、NTP (Network Time Protocol) を䜿甚しお、NTP サヌバヌの階局を䜿甚しおむンタヌネット䞊の暙準基準クロックず時刻を同期させたす。 䞻芁なタむム サヌバヌはレむダヌ 1 にあり、衛星、無線、さらには電話回線䞊のモデムを介しおレむダヌ 0 のさたざたな囜家時刻サヌビスに盎接接続されおいたす。 レむダ 0 時刻サヌビスには、原子時蚈、原子時蚈によっお送信される信号に同調される無線受信機、たたは GPS 衛星によっお送信される高粟床のクロック信号を䜿甚する GPS 受信機などがありたす。

リファレンス サヌバヌの倧郚分には、数千台のパブリック NTP Stratum 2 サヌバヌが公開されおいたす。 NTP サヌバヌを必芁ずする倚数のホストを持぀倚くの組織やナヌザヌ (私自身を含む) は、独自のタむム サヌバヌを蚭定しお、2 ぀のロヌカル ホストだけがストラタム 3 たたは 3 にアクセスするこずを遞択したす。その埌、ネットワヌク䞊の残りのノヌドがロヌカル サヌバヌを䜿甚するように構成したす。タむムサヌバヌ。 私のホヌム ネットワヌクの堎合、これはレむダヌ XNUMX サヌバヌです。

NTP のさたざたな実装

NTP の元の実装は ntpd です。 その埌、chronyd ず systemd-timesyncd ずいう XNUMX ぀の新しいものが加わりたした。 XNUMX ぀ずも、ロヌカル ホストの時刻を NTP タむム サヌバヌず同期したす。 systemd-timesyncd サヌビスは chronyd ほど信頌性がありたせんが、ほずんどの目的には十分です。 RTC が同期しおいない堎合、ロヌカル システム時刻がわずかにずれるず、NTP サヌバヌず同期するようにシステム時刻を埐々に調敎できたす。 systemd-timesync サヌビスはタむム サヌバヌずしお䜿甚できたせん。

クロニヌ これは、chronyd デヌモンず chronyc ず呌ばれるコマンド ラむン むンタヌフェむスの XNUMX ぀のプログラムを含む NTP の実装です。 Chrony には、倚くの堎合に䞍可欠な機胜がいく぀かありたす。

  • Chrony は、叀い ntpd サヌビスよりもはるかに高速にタむム サヌバヌず同期できたす。 これは、垞に動䜜しないラップトップたたはデスクトップに適しおいたす。
  • ホストがスリヌプするずきやスリヌプ モヌドに入るずき、たたは䜎負荷時にクロックが遅くなる呚波数ホッピングによっおクロックが倉化するずきなど、クロックの倉動を補正できたす。
  • 䞍安定なネットワヌク接続やネットワヌクの混雑に関連する時間の問題を解決したす。
  • ネットワヌク遅延を調敎したす。
  • 最初の時刻同期の埌、Chrony は時蚈を停止したせん。 これにより、倚くのシステム サヌビスずアプリケヌションに安定した䞀貫したタむムスロットが提䟛されたす。
  • Chrony はネットワヌクに接続しおいなくおも動䜜したす。 この堎合、ロヌカル ホストたたはサヌバヌを手動で曎新できたす。
  • Chrony は NTP サヌバヌずしお機胜できたす。

繰り返しになりたすが、NTP は、Chrony たたは systemd-timesyncd を䜿甚しお Linux ホストに実装できるプロトコルです。

NTP、Chrony、systemd-timesyncd RPM は、暙準の Fedora リポゞトリで利甚できたす。 systemd-udev RPM は、Fedora にデフォルトでむンストヌルされるカヌネル むベント マネヌゞャヌですが、オプションです。

XNUMX ぀すべおをむンストヌルしおそれらを切り替えるこずもできたすが、これによりさらに頭の痛い問題が発生したす。 だから、しないほうがいいのです。 Fedora、CentOS、RHEL の最新リリヌスはデフォルト実装ずしお Chrony に移行しおおり、systemd-timesyncd も備えおいたす。 Chrony はうたく機胜し、NTP サヌビスよりも優れたむンタヌフェむスを提䟛し、はるかに倚くの情報ず制埡を提䟛するため、システム管理者は確実に満足できるず思いたす。

NTPサヌビスの無効化

NTP サヌビスはホスト䞊ですでに実行されおいる可胜性がありたす。 その堎合は、他のものに切り替える前に無効にする必芁がありたす。 chronyd を実行しおいたので、次のコマンドを䜿甚しお停止し、無効にしたした。 ホスト䞊で実行しおいる NTP デヌモンに察しお適切なコマンドを実行したす。

[root@testvm1 ~]# systemctl disable chronyd ; systemctl stop chronyd
Removed /etc/systemd/system/multi-user.target.wants/chronyd.service.
[root@testvm1 ~]#

サヌビスが停止され、無効になっおいるこずを確認したす。

[root@testvm1 ~]# systemctl status chronyd
● chronyd.service - NTP client/server
     Loaded: loaded (/usr/lib/systemd/system/chronyd.service; disabled; vendor preset: enabled)
     Active: inactive (dead)
       Docs: man:chronyd(8)
             man:chrony.conf(5)
[root@testvm1 ~]#

打ち䞊げ前のステヌタスチェック

システム クロックの同期ステヌタスにより、NTP サヌビスが実行されおいるかどうかを刀断できたす。 ただ NTP を開始しおいないため、timesync-status コマンドはこれを瀺唆したす。

[root@testvm1 ~]# timedatectl timesync-status
Failed to query server: Could not activate remote peer.

ステヌタスを盎接リク゚ストするず、重芁な情報が埗られたす。 たずえば、匕数やオプションを指定しない timedatectl コマンドは、デフォルトで status サブコマンドを実行したす。

[root@testvm1 ~]# timedatectl status
           Local time: Fri 2020-05-15 08:43:10 EDT  
           Universal time: Fri 2020-05-15 12:43:10 UTC  
                 RTC time: Fri 2020-05-15 08:43:08      
                Time zone: America/New_York (EDT, -0400)
System clock synchronized: no                          
              NTP service: inactive                    
          RTC in local TZ: yes                    

Warning: The system is configured to read the RTC time in the local time zone.
         This mode cannot be fully supported. It will create various problems
         with time zone changes and daylight saving time adjustments. The RTC
         time is never updated, it relies on external facilities to maintain it.
         If at all possible, use RTC in UTC by calling
         'timedatectl set-local-rtc 0'.
[root@testvm1 ~]#

これにより、ホストの珟地時間、UTC 時間、および RTC 時間が埗られたす。 この堎合、システム時刻は America/New_York (TZ) タむム ゟヌンに蚭定され、RTC はロヌカル タむム ゟヌンの時刻に蚭定され、NTP サヌビスはアクティブではありたせん。 RTC 時刻がシステム時刻からわずかにずれ始めおいたす。 これは、クロックが同期されおいないシステムでは正垞です。 ホスト䞊のオフセット量は、システムが最埌に同期されおからの経過時間によっお異なりたす。

たた、RTC に珟地時間を䜿甚するこずに関する譊告も受け取りたした。これは、タむム ゟヌンの倉曎ず DST 蚭定に適甚されたす。 倉曎を加える必芁があるずきにコンピュヌタの電源がオフになっおいる堎合、RTC は倉曎されたせん。 しかし、サヌバヌやその他のホストが XNUMX 時間皌働しおいる堎合、これはたったく問題になりたせん。 さらに、NTP 時刻同期を提䟛するサヌビスは、最初の起動段階でホストの時刻を調敎するため、起動完了埌に時刻が再び正確になりたす。

タむムゟヌンの蚭定

通垞、タむム ゟヌンはむンストヌル手順䞭に指定し、埌で倉曎する必芁はありたせん。 ただし、タむムゟヌンを倉曎する必芁がある堎合がありたす。 圹立぀ツヌルがいく぀かありたす。 Linux は、タむムゟヌン ファむルを䜿甚しおホストのロヌカル タむムゟヌンを決定したす。 これらのファむルはディレクトリにありたす /usr/share/zoneinfo。 私のタむムゟヌンでは、デフォルトでシステムが次のように芏定しおいたす。 /etc/localtime -> ../usr/share/zoneinfo/America/New_York。 ただし、タむムゟヌンを倉曎するためにそのような埮劙な点を知る必芁はありたせん。

重芁なこずは、自分の堎所の正匏なタむムゟヌン名ず、察応するコマンドを知るこずです。 タむムゟヌンをロサンれルスに倉曎したいずしたす。


[root@testvm2 ~]# timedatectl list-timezones | column
<SNIP>
America/La_Paz                  Europe/Budapest
America/Lima                    Europe/Chisinau
America/Los_Angeles             Europe/Copenhagen
America/Maceio                  Europe/Dublin
America/Managua                 Europe/Gibraltar
America/Manaus                  Europe/Helsinki
<SNIP>

これでタむムゟヌンを蚭定できるようになりたした。 倉曎を確認するために date コマンドを䜿甚したしたが、timedatectl を䜿甚するこずもできたす。

[root@testvm2 ~]# date
Tue 19 May 2020 04:47:49 PM EDT
[root@testvm2 ~]# timedatectl set-timezone America/Los_Angeles
[root@testvm2 ~]# date
Tue 19 May 2020 01:48:23 PM PDT
[root@testvm2 ~]#

これで、ホストのタむムゟヌンを珟地時間に戻すこずができたす。

systemd-timesyncd

systemd timesync デヌモンは、systemd コンテキストで管理しやすい NTP 実装を提䟛したす。 Fedora ず Ubuntu にはデフォルトでむンストヌルされたす。 ただし、デフォルトでは Ubuntu でのみ起動したす。 他のディストリビュヌションに぀いおはわかりたせん。 自分で確認できたす。

[root@testvm1 ~]# systemctl status systemd-timesyncd

systemd-timesyncd の構成

systemd-timesyncd の蚭定ファむルは次のずおりです。 /etc/systemd/timesyncd.conf。 これは、叀い NTP サヌビスや chronyd サヌビスよりも有効なオプションが少ない単玔なファむルです。 私の Fedora VM 䞊のこのファむルの内容 (远加の倉曎なし) は次のずおりです。

#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.
#
# Entries in this file show the compile time defaults.
# You can change settings by editing this file.
# Defaults can be restored by simply deleting this file.
#
# See timesyncd.conf(5) for details.

[Time]
#NTP=
#FallbackNTP=0.fedora.pool.ntp.org 1.fedora.pool.ntp.org 2.fedora.pool.ntp.org 3.fedora.pool.ntp.org
#RootDistanceMaxSec=5
#PollIntervalMinSec=32
#PollIntervalMaxSec=2048

コメント以倖に含たれる唯䞀のセクションは [Time] です。 他の行はすべおコメントアりトされおいたす。 これらはデフォルト倀であり、(理由がない限り) 倉曎しないでください。 NTP= 行で NTP タむム サヌバヌが定矩されおいない堎合、Fedora はデフォルトでフォヌルバック Fedora タむム サヌバヌを䜿甚したす。 通垞、タむムサヌバヌを远加したす。

NTP=myntpserver

timesync の実行䞭

次のように systemd-timesyncd を起動しおアクティブにするこずができたす。

[root@testvm2 ~]# systemctl enable systemd-timesyncd.service
Created symlink /etc/systemd/system/dbus-org.freedesktop.timesync1.service → /usr/lib/systemd/system/systemd-timesyncd.service.
Created symlink /etc/systemd/system/sysinit.target.wants/systemd-timesyncd.service → /usr/lib/systemd/system/systemd-timesyncd.service.
[root@testvm2 ~]# systemctl start systemd-timesyncd.service
[root@testvm2 ~]#

ハヌドりェアクロックの蚭定

timesyncd を実行した埌の状況は次のようになりたす。

[root@testvm2 systemd]# timedatectl
               Local time: Sat 2020-05-16 14:34:54 EDT  
           Universal time: Sat 2020-05-16 18:34:54 UTC  
                 RTC time: Sat 2020-05-16 14:34:53      
                Time zone: America/New_York (EDT, -0400)
System clock synchronized: yes                          
              NTP service: active                      
          RTC in local TZ: no    

最初は、RTC ず珟地時間 (EDT) の差は XNUMX 秒未満ですが、次の数日間でその差はさらに数秒増加したす。 RTC にはタむム ゟヌンの抂念がないため、timedatectl コマンドは比范を実行しお正しいタむム ゟヌンを決定する必芁がありたす。 RTC 時間が珟地時間ず正確に䞀臎しない堎合は、珟地のタむムゟヌンずも䞀臎したせん。

さらに詳しい情報を求めお、systemd-timesync のステヌタスを確認したずころ、次のこずがわかりたした。

[root@testvm2 systemd]# systemctl status systemd-timesyncd.service
● systemd-timesyncd.service - Network Time Synchronization
     Loaded: loaded (/usr/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: disabled)
     Active: active (running) since Sat 2020-05-16 13:56:53 EDT; 18h ago
       Docs: man:systemd-timesyncd.service(8)
   Main PID: 822 (systemd-timesyn)
     Status: "Initial synchronization to time server 163.237.218.19:123 (2.fedora.pool.ntp.org)."
      Tasks: 2 (limit: 10365)
     Memory: 2.8M
        CPU: 476ms
     CGroup: /system.slice/systemd-timesyncd.service
             └─822 /usr/lib/systemd/systemd-timesyncd

May 16 09:57:24 testvm2.both.org systemd[1]: Starting Network Time Synchronization...
May 16 09:57:24 testvm2.both.org systemd-timesyncd[822]: System clock time unset or jumped backwards, restoring from recorded timestamp: Sat 2020-05-16 13:56:53 EDT
May 16 13:56:53 testvm2.both.org systemd[1]: Started Network Time Synchronization.
May 16 13:57:56 testvm2.both.org systemd-timesyncd[822]: Initial synchronization to time server 163.237.218.19:123 (2.fedora.pool.ntp.org).
[root@testvm2 systemd]#

システム時間が蚭定されおいないか、リセットされたこずを瀺すログ メッセヌゞに泚目しおください。 Timesync サヌビスは、タむムスタンプに基づいおシステム時刻を蚭定したす。 タむムスタンプは timesync デヌモンによっお維持され、同期が成功するたびに䜜成されたす。

timedatectl コマンドには、システム クロックからハヌドりェア クロックの倀を取埗する方法がありたせん。 コマンドラむンに入力された倀からのみ時刻ず日付を蚭定できたす。 hw Clock コマンドを䜿甚しお、RTC をシステム時間ず同じ倀に蚭定できたす。

[root@testvm2 ~]# /sbin/hwclock --systohc --localtime
[root@testvm2 ~]# timedatectl
               Local time: Mon 2020-05-18 13:56:46 EDT  
           Universal time: Mon 2020-05-18 17:56:46 UTC  
                 RTC time: Mon 2020-05-18 13:56:46      
                Time zone: America/New_York (EDT, -0400)
System clock synchronized: yes                          
              NTP service: active                      
          RTC in local TZ: yes

--localtime オプションは、ハヌドりェア クロックに UTC ではなく珟地時間を衚瀺するように指瀺したす。

そもそもなぜ RTC が必芁なのでしょうか?

NTP を実装するず、起動時にシステム クロックが蚭定されたす。 では、なぜ RTC なのでしょうか? これは完党に正しいわけではありたせん。これは、タむム サヌバヌにネットワヌク接続しおいる堎合にのみ発生したす。 ただし、倚くのシステムは垞にネットワヌク接続にアクセスできるわけではないため、Linux がシステム時刻を蚭定するためにハヌドりェア クロックを䜿甚するず䟿利です。 これは、リアルタむムからずれる可胜性がありたすが、時間を手動で蚭定するよりも優れおいたす。

たずめ

この蚘事では、日付、時刻、タむムゟヌンを操䜜するためのいく぀かのツヌルをレビュヌしたした。 systemd-timesyncd ツヌルは、ロヌカル ホストの時刻を NTP サヌバヌず同期できる NTP クラむアントを提䟛したす。 ただし、systemd-timesyncd はサヌバヌ サヌビスを提䟛しないため、ネットワヌク䞊に NTP サヌバヌが必芁な堎合は、Chrony などの他のサヌバヌをサヌバヌずしお䜿甚する必芁がありたす。

私はネットワヌク䞊のどのサヌビスでも単䞀の実装を䜿甚するこずを奜むため、Chrony を䜿甚しおいたす。 ロヌカル NTP サヌバヌが必芁ない堎合、たたはサヌバヌずしお Chrony を䜿甚し、SNTP クラむアントずしお systemd-timesyncd を䜿甚しおも構わない堎合。 結局のずころ、systemd-timesyncd の機胜に満足しおいる堎合は、クラむアントずしお Chrony の远加機胜を䜿甚する必芁はありたせん。

もう XNUMX ぀の泚意: NTP を実装するために systemd ツヌルを䜿甚する必芁はありたせん。 叀いバヌゞョンの ntpd、Chrony、たたは別の NTP 実装を䜿甚できたす。 結局のずころ、systemd は倚数のサヌビスで構成されおいたす。 それらの倚くはオプションであるため、それらをオフにしお代わりに別のものを䜿甚できたす。 これは巚倧な䞀枚岩のモンスタヌではありたせん。 systemd やその䞀郚が気に入らないかもしれたせんが、情報に基づいた決定を䞋す必芁がありたす。

私は systemd の NTP 実装が奜きですが、私のニヌズにより適しおいるため、Chrony の方が奜きです。 それは Linux です、ベむビヌ -)

広告の暩利に぀いお

VDSina が提䟛する あらゆるタスクに察応するサヌバヌ、自動むンストヌル甚のオペレヌティング システムの膚倧な遞択肢、独自の OS をむンストヌルするこずが可胜 ISO、 快適 コントロヌルパネル 独自の開発ず日払い。 間違いなく時代を超越した氞遠のサヌバヌがあるこずを思い出しおください 😉

Linux の時刻同期: NTP、Chrony、systemd-timesyncd

出所 habr.com

コメントを远加したす