Linux уақытын синхрондау: NTP, Chrony және systemd-timesyncd

Linux уақытын синхрондау: NTP, Chrony және systemd-timesyncd
Көптеген адамдар уақытты қадағалайды. Таңертеңгілік рәсімдерді орындау және жұмысқа бару, түскі үзіліс, жобаның белгіленген мерзімдерін орындау, туған күндер мен мерекелерді тойлау, ұшаққа отыру және т.б.

Оның үстіне: бізде кейбіреулер уақытпен айналысады. Менің сағатым күн энергиясымен жұмыс істейді және дәл уақытты Ұлттық стандарттар мен технологиялар институтынан алады (NIST) Форт Коллинзге, Колорадоға ұзын толқынды радио арқылы WWVB. Уақыт сигналдары Форт Коллинзде орналасқан атомдық сағатпен синхрондалады. Менің Fitbit серверіммен синхрондалатын телефоныммен синхрондалуда NTP, ол ақырында атом сағатымен синхрондалады.

Құрылғылар уақытты да бақылайды

Біздің құрылғыларымыз бен компьютерлерімізге дәл уақытты қажет ететін көптеген себептер бар. Мысалы, банктік қызметте, қор нарықтарында және басқа да қаржылық бизнесте транзакциялар тиісті тәртіпте жүзеге асырылуы керек және бұл үшін дәл уақыт реттілігі маңызды.

Біздің телефондарымыз, планшеттеріміз, машиналарымыз, GPS жүйелері мен компьютерлеріміздің барлығы дәл уақыт пен күн параметрлерін қажет етеді. Мен компьютердің жұмыс үстеліндегі сағат дұрыс уақытты көрсеткенін қалаймын. Еске салғыштардың жергілікті күнтізбемде дұрыс уақытта пайда болғанын қалаймын. Дұрыс уақыт сонымен қатар cron және жүйелік тапсырмалардың дұрыс уақытта орындалуын қамтамасыз етеді.

Күн мен уақыт журналды тіркеу үшін де маңызды, сондықтан күн мен уақыт негізінде белгілі журналдарды табу оңайырақ. Мысалы, мен бір кездері DevOps-те жұмыс істедім (ол кезде олай аталмаған) және Солтүстік Каролина штатында электрондық пошта жүйесін орнатқанмын. Біз күніне 20 миллионнан астам электрондық поштаны өңдейтінбіз. Серверлер сериясы арқылы электрондық поштаны қадағалау немесе географиялық дисперсті хосттардағы журнал файлдарын пайдаланып оқиғалардың нақты ретін анықтау, егер тиісті компьютерлер уақытында синхрондалған болса, әлдеқайда оңай болуы мүмкін.

Бір рет - көп сағат

Linux хосттары жүйе уақыты мен RTC уақыты бар екенін ескеруі керек. RTC (нақты уақыттағы сағат) - аппараттық сағаттың сәл оғаш және дәл емес атауы.

Аппараттық құрал сағаты жүйенің аналық платасындағы батареяны пайдаланып, компьютер өшірілген кезде де үздіксіз жұмыс істейді. RTC негізгі функциясы уақыт серверіне қосылым жоқ кезде уақытты сақтау болып табылады. Интернет арқылы уақыт серверіне қосылу мүмкін болмаған күндері әрбір компьютерде нақты ішкі сағат болуы керек болды. Операциялық жүйелер RTC-ге жүктеу кезінде қол жеткізуі керек болды және пайдаланушы оның дұрыс екеніне көз жеткізу үшін BIOS аппараттық конфигурация интерфейсін пайдаланып жүйе уақытын қолмен орнатуы керек болды.

Аппараттық сағаттар уақыт белдеуі ұғымын түсінбейді; RTC тек уақытты сақтайды, уақыт белдеуін немесе UTC (Үйлестірілген әмбебап уақыт, GMT немесе Гринвич уақыты деп те аталады) ығысуын емес. Осы мақалада кейінірек қарастыратын құралды пайдаланып RTC орнатуға болады.

Жүйе уақыты - бұл ОЖ жұмыс үстеліндегі GUI сағатында, күн пәрменінің шығысында, журналдардың уақыт белгілерінде көрсететін уақыты. Бұл файлдар жасалған, өзгертілген және ашылған кезде де қолданылады.

Бетте rtc үшін адам RTC және жүйелік сағаттың толық сипаттамасы бар.

NTP деген не?

Бүкіл дүние жүзіндегі компьютерлер NTP серверлерінің иерархиясын пайдалана отырып, уақыттарын Интернет арқылы стандартты анықтамалық сағаттармен үндестіру үшін NTP (Network Time Protocol) пайдаланады. Негізгі уақыт серверлері 1-деңгейде және олар спутник, радио немесе тіпті телефон желілері арқылы модемдер арқылы 0-деңгейдегі әртүрлі ұлттық уақыт қызметтеріне тікелей қосылады. 0-деңгейдегі уақыт қызметтері атом сағаттары, атом сағаттары арқылы берілетін сигналдарға реттелетін радиоқабылдағыш немесе GPS жерсеріктері арқылы берілетін жоғары дәлдіктегі сағат сигналдарын пайдаланатын GPS қабылдағышы болуы мүмкін.

Анықтамалық серверлердің басым көпшілігінде көпшілікке ашық бірнеше мың NTP қабатының 2 серверлері бар. NTP серверін қажет ететін көптеген хосттары бар көптеген ұйымдар мен пайдаланушылар (өзім қосамын) өздерінің уақыт серверлерін орнатуды таңдайды, осылайша тек бір жергілікті хост 2 немесе 3 қабатқа қатынасады. Содан кейін олар желідегі қалған түйіндерді жергілікті желіні пайдалану үшін конфигурациялайды. уақыт сервері. Менің үй желісі жағдайында бұл 3-деңгей сервері.

NTP әртүрлі іске асырулары

NTP бастапқы іске асырылуы ntpd болып табылады. Содан кейін оған екі жаңа, chronyd және systemd-timesyncd қосылды. Үшеуі де жергілікті хост уақытын NTP уақыт серверімен синхрондайды. systemd-timesyncd қызметі chronyd сияқты сенімді емес, бірақ ол көптеген мақсаттар үшін жеткілікті. Егер RTC синхрондалмаған болса, жергілікті жүйе уақыты аздап ауытқып кеткенде, ол NTP серверімен синхрондау үшін жүйе уақытын біртіндеп реттей алады. systemd-timesync қызметін уақыт сервері ретінде пайдалану мүмкін емес.

Хроника бұл екі бағдарламадан тұратын NTP іске асыруы: chronyd демоны және chronyc деп аталатын пәрмен жолы интерфейсі. Chrony көптеген жағдайларда қажет болатын кейбір мүмкіндіктерге ие:

  • Chrony ескі ntpd қызметіне қарағанда уақыт серверімен синхрондауға қабілетті. Бұл үнемі жұмыс істемейтін ноутбуктер немесе жұмыс үстелдері үшін жақсы.
  • Ол хост ұйқы режиміне өткенде немесе ұйқы режиміне өткенде немесе аз жүктеме кезінде сағаттарды баяулататын жиіліктің секіруіне байланысты сағат өзгергенде сияқты сағаттың ауытқуын өтей алады.
  • Ол тұрақсыз желі қосылымына немесе желінің кептелуіне байланысты уақыт мәселелерін шешеді.
  • Ол желілік кідірістерді реттейді.
  • Бастапқы уақыт синхрондаудан кейін Chrony ешқашан сағатты тоқтатпайды. Бұл көптеген жүйелік қызметтер мен қолданбалар үшін тұрақты және дәйекті уақыт аралығын қамтамасыз етеді.
  • Chrony желі қосылымынсыз да жұмыс істей алады. Бұл жағдайда жергілікті хостты немесе серверді қолмен жаңартуға болады.
  • Chrony NTP сервері ретінде әрекет ете алады.

Тағы да айта кетейін, NTP - бұл Linux хостында Chrony немесе systemd-timesyncd көмегімен іске асырылуы мүмкін протокол.

NTP, Chrony және systemd-timesyncd RPM стандартты Fedora репозитарийлерінде қол жетімді. systemd-udev RPM - Fedora жүйесінде әдепкі бойынша орнатылған, бірақ міндетті емес ядро ​​оқиғасының менеджері.

Сіз үшеуін орнатып, олардың арасында ауыса аласыз, бірақ бұл қосымша бас ауруын тудырады. Сондықтан болмаған дұрыс. 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 пәрмені әдепкі бойынша күй ішкі пәрменін орындайды:

[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 уақытын береді. Бұл жағдайда жүйе уақыты Америка/Нью_Йорк (TZ) уақыт белдеуіне орнатылады, RTC жергілікті уақыт белдеуіндегі уақытқа орнатылады және NTP қызметі белсенді емес. RTC уақыты жүйе уақытынан сәл ауытқи бастады. Бұл сағаттары синхрондалмаған жүйелер үшін қалыпты жағдай. Хосттағы ығысу мөлшері жүйе соңғы рет синхрондаудан бері өткен уақытқа байланысты.

Сондай-ақ RTC үшін жергілікті уақытты пайдалану туралы ескерту алдық - бұл уақыт белдеуінің өзгерістеріне және DST параметрлеріне қатысты. Егер өзгертулер енгізу қажет болғанда компьютер өшірілсе, RTC өзгермейді. Бірақ тәулік бойы жұмыс істейтін серверлер немесе басқа хосттар үшін бұл мүлдем проблема емес. Бұған қоса, 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>

Енді сіз уақыт белдеуін орната аласыз. Өзгерістерді тексеру үшін күн пәрменін қолдандым, бірақ 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

Жүйелік уақыт синхрондау демоны жүйелік контексте басқаруға оңай 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

Онда түсініктемелерден басқа жалғыз бөлім — [Уақыт]. Барлық басқа жолдарға түсініктеме беріледі. Бұл әдепкі мәндер және оларды өзгертуге болмайды (егер сізде себеп болмаса). NTP= жолында анықталған NTP уақыт сервері болмаса, Fedora әдепкі бойынша резервтік Fedora уақыт серверіне айналады. Мен әдетте уақыт серверімді қосамын:

NTP=myntpserver

Жұмыс уақытын синхрондау

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) арасындағы айырмашылық бір секундтан аз, ал келесі бірнеше күнде сәйкессіздік тағы бір-екі секундқа артады. 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 қызметі уақыт белгісіне негізделген жүйе уақытын орнатады. Уақыт белгілері уақыт синхрондау демоны арқылы сақталады және әрбір сәтті синхрондау кезінде жасалады.

timedatectl пәрменінде жүйелік сағаттан аппараттық сағаттың мәнін алу мүмкіндігі жоқ. Ол тек пәрмен жолында енгізілген мәннен уақыт пен күнді орната алады. RTC параметрін hwclock пәрмені арқылы жүйе уақытымен бірдей мәнге орнатуға болады:

[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 қосымша мүмкіндіктерін пайдаланудың қажеті жоқ.

Тағы бір ескертпе: NTP енгізу үшін жүйелік құралдарды пайдалану қажет емес. Сіз ntpd, Chrony ескі нұсқасын немесе басқа NTP енгізуін пайдалана аласыз. Өйткені, systemd көптеген қызметтерден тұрады; олардың көпшілігі қосымша болып табылады, сондықтан оларды өшіріп, орнына басқа нәрсені пайдалануға болады. Бұл үлкен монолитті құбыжық емес. Сізге жүйелік немесе оның бөліктері ұнамауы мүмкін, бірақ сіз саналы шешім қабылдауыңыз керек.

Маған systemd-тің NTP енгізуі ұнайды, бірақ мен Chrony-ді ұнатамын, себебі ол менің қажеттіліктеріме көбірек сәйкес келеді. Бұл Linux, балақай -)

Жарнама құқықтары туралы

VDSina ұсынады кез келген тапсырмаға арналған серверлер, автоматты орнатуға арналған операциялық жүйелердің үлкен таңдауы, кез келген ОЖ-ны өзіңіз орнатуға болады ISO, ыңғайлы басқару панелі жеке даму және күнделікті төлем. Еске салайық, бізде мәңгілік серверлер бар, олар сөзсіз мәңгілік 😉

Linux уақытын синхрондау: NTP, Chrony және systemd-timesyncd

Ақпарат көзі: www.habr.com

пікір қалдыру