
Většina lidí pečlivě sleduje čas. Vstáváme včas, abychom splnili naše ranní rituály a vyrazili do práce, udělali si přestávku na oběd, dodrželi termíny projektů, oslavili narozeniny a svátky, nastoupili do letadla a tak dále.
Někteří z nás jsou navíc posedlí časem. Moje hodinky jsou solární a získávají přesný čas z Národního institutu standardů a technologií () ve Fort Collins, Colorado, prostřednictvím dlouhovlnného rozhlasu . Signály času jsou synchronizovány s atomovými hodinami, které se rovněž nacházejí ve Fort Collins. Můj Fitbit se synchronizuje s mým telefonem, který se synchronizuje se serverem , který se nakonec synchronizuje s atomovými hodinami.
Zařízení také sledují čas.
Existuje mnoho důvodů, proč naše zařízení a počítače potřebují přesný čas. Například ve finančním sektoru, na burzách a v jiných podnikáních musí být transakce prováděny v řádném pořadí, což vyžaduje přesné časové posloupnosti.
Naše telefony, tablety, automobily, GPS systémy a počítače vyžadují přesné nastavení času a data. Chci, aby hodiny na pracovní ploše mého počítače ukazovaly správný čas. Chci, aby se připomínky v mém lokálním kalendáři objevovaly v pravý čas. Správný čas také zaručuje, že úlohy cron a systemd se spouští v pravý čas.
Datum a čas jsou také důležité pro evidence logů, což usnadňuje vyhledávání konkrétních logů podle data a času. Například, jednou jsem pracoval v DevOps (tehdy se tomu tak neříkalo) a pracoval jsem na nastavení e-mailového systému ve státě Severní Karolína. Dříve jsme zpracovávali více než 20 milionů e-mailů denně. Sledování e-mailů přes řadu serverů nebo určování přesné posloupnosti událostí pomocí souborů logů na geograficky rozptýlených hostitelích může být mnohem jednodušší, pokud jsou odpovídající počítače synchronizovány podle času.
Čas je jeden — hodin mnoho
Linux hosty musí brát v úvahu, že existuje systémový čas a čas RTC. RTC (Real Time Clock — hodiny reálného času) je poněkud zvláštní a nepříliš přesný název pro hardwarové hodiny.
Hardwarové hodiny pracují nepřetržitě, i když je počítač vypnutý, a používají baterii na základní desce systému. Hlavní funkcí RTC je uchovávat čas, pokud není k dispozici připojení k časovému serveru. V dobách, kdy nebylo možné připojit se k časovému serveru přes internet, musel mít každý počítač přesné vnitřní hodiny. Operační systémy se musely při spuštění obracet na RTC a uživatel musel ručně nastavit systémový čas pomocí hardwarového rozhraní BIOS, aby se ujistil, že je správný.
Hardwarové hodiny neznají pojem časových zón; v RTC je uchováván pouze čas, nikoli časová zóna nebo posun od UTC (Coordinated Universal Time, což je také známé jako GMT nebo Greenwich Mean Time). RTC můžete nastavit pomocí nástroje, o kterém vám později v tomto článku povím.
Systémový čas je čas, který operační systém zobrazuje na hodinách GUI na vašem pracovním stole, ve výstupu příkazu date a ve značkách časových razítek v logech. Týká se také času vytvoření, změny a otevření souborů.
Na stránce existuje kompletní popis RTC a systémových hodin.
Co je to NTP?
Počítače po celém světě používají NTP (Network Time Protocol) k synchronizaci svého času s standardními referenčními hodinami prostřednictvím internetu pomocí hierarchie NTP serverů. Hlavní časové servery jsou na úrovni 1 a jsou přímo připojeny k různým národním časovým službám na úrovni 0 prostřednictvím satelitu, rádia nebo dokonce modemů přes telefonní linky. Časové služby na úrovni 0 mohou být atomové hodiny, rádio, které je naladěno na signály přenášené atomovými hodinami, nebo GPS přijímač používající vysoce přesné signály hodin, které přenášejí satelity GPS.
Na většině referenčních serverů je otevřeno několik tisíc veřejných NTP serverů stratum 2, které jsou dostupné pro všechny. Mnoho organizací a uživatelů (včetně mě) s velkým počtem hostitelů, kteří potřebují NTP server, dává přednost nastavení vlastních časových serverů, takže pouze jeden místní host se obrací na stratum 2 nebo 3. Poté nastavují zbytek uzlů v síti tak, aby používaly místní časový server. V případě mé domácí sítě jde o server úrovně 3.
Různé implementace NTP
Původní implementací NTP je ntpd. Poté se přidaly dvě novější, chronyd a systemd-timesyncd. Všechny tři synchronizují čas místního hostitele se serverem času NTP. Služba systemd-timesyncd není tak spolehlivá jako chronyd, ale je dostatečná pro většinu účelů. Pokud RTC není synchronizován, může postupně upravit systémový čas, aby se synchronizoval se serverem NTP, když se lokální systémový čas mírně posune. Služba systemd-timesync nemůže být použita jako časový server.
je implementace NTP, která obsahuje dva programy: démon chronyd a rozhraní příkazového řádku nazvané chronyc. Chrony má některé funkce, které jsou v mnoha případech jednoduše nenahraditelné:
- Chrony se může synchronizovat se serverem času mnohem rychleji než stará služba ntpd. To je výhodné pro notebooky nebo stolní počítače, které nepracují neustále.
- Může kompenzovat kolísání taktovacích frekvencí, například když hostitel přechází do režimu spánku nebo se probouzí, nebo když dojde ke skokové změně frekvence, která zpomaluje taktovací frekvence při nízkých zatíženích.
- Řeší problémy s časem spojené s nestabilním síťovým připojením nebo přetížením sítě.
- Upravuje zpoždění v síti.
- Po počáteční synchronizaci času Chrony nikdy nezastavuje hodiny. To zajišťuje stabilní a konsistentní časové intervaly pro mnoho systémových služeb a aplikací.
- Chrony může fungovat i bez připojení k síti. V tomto případě lze místní host nebo server aktualizovat ručně.
- Chrony může fungovat jako NTP server.
Znovu: NTP je protokol, který může být implementován na hostiteli Linux pomocí Chrony nebo systemd-timesyncd.
RPM balíčky NTP, Chrony a systemd-timesyncd jsou k dispozici ve standardních repozitářích Fedora. RPM systemd-udev je správce událostí jádra, který je ve Fedoře nainstalován ve výchozím nastavení, ale není povinný k použití.
Můžete nainstalovat všechny tři a přepínat mezi nimi, ale to způsobí zbytečné potíže. Takže to raději nedělejte. Moderní verze Fedora, CentOS a RHEL přešly na Chrony jako standardní implementaci a navíc mají systemd-timesyncd. Považuji Chrony za dobře fungující, poskytuje lepší rozhraní než služba NTP, dává mnohem více informací a zvyšuje kontrolu, což se určitě bude líbit systémovým administrátorům.
Deaktivace služeb NTP
Možná je na vašem hostiteli již spuštěna služba NTP. Pokud ano, musíte ji před přepnutím na něco jiného deaktivovat. Měl jsem spuštěn chronyd, takže jsem použil následující příkazy k zastavení a deaktivaci. Spusťte odpovídající příkazy pro jakýkoli démon NTP, který používáte na svém hostiteli:
[root@testvm1 ~]# systemctl disable chronyd ; systemctl stop chronyd
Odstraněno /etc/systemd/system/multi-user.target.wants/chronyd.service.
[root@testvm1 ~]#Zkontrolujte, že je služba zastavena a deaktivována:
[root@testvm1 ~]# systemctl status chronyd
● chronyd.service - NTP klient/server
Nahráno: nahráno (/usr/lib/systemd/system/chronyd.service; zakázáno; předvolba výrobce: povoleno)
Aktivní: neaktivní (mrtvý)
Dokumenty: man:chronyd(8)
man:chrony.conf(5)
[root@testvm1 ~]#Kontrola stavu před spuštěním
Stav systémové synchronizace hodin umožňuje určit, zda je služba NTP spuštěna. Vzhledem k tomu, že jste ještě NTP nespustili, příkaz timesync-status na to naznačí:
[root@testvm1 ~]# timedatectl timesync-status
Nepodařilo se dotazovat server: Nebylo možné aktivovat vzdáleného partnera.Přímý dotaz na stav poskytuje důležité informace. Například příkaz timedatectl bez argumentu nebo parametrů provádí podpříkaz status jako výchozí:
[root@testvm1 ~]# timedatectl status
Lokální čas: Pá 2020-05-15 08:43:10 EDT
Univerzální čas: Pá 2020-05-15 12:43:10 UTC
RTC čas: Pá 2020-05-15 08:43:08
Časové pásmo: Amerika/New_York (EDT, -0400)
Synchronizace systémového hodin: ne
NTP služba: neaktivní
RTC v místním TZ: ano
Varování: Systém je nastaven tak, aby četl čas RTC v místním časovém pásmu.
Tento režim nemůže být plně podporován. Vytvoří různé problémy
se změnami časových pásem a úpravami letního času. Čas RTC
není nikdy aktualizován, spoléhá na externí zařízení, aby jej udržovalo.
Pokud je to možné, používejte RTC v UTC tím, že zavoláte
'timedatectl set-local-rtc 0'.
[root@testvm1 ~]#Tímto získáte místní čas pro váš hostitel, čas UTC a čas RTC. V tomto případě je systémový čas nastaven na časové pásmo Amerika/New_York (TZ), RTC je nastaven na čas v místním časovém pásmu a služba NTP není aktivní. Čas RTC se začal mírně odchylovat od systémového času. To je normální pro systémy, jejichž hodiny nebyly synchronizovány. Rozsah odchylky na hostiteli závisí na době, která uplynula od poslední synchronizace systému.
Také jsme dostali varování o používání místního času pro RTC – to se týká změn časového pásma a nastavení letního času. Pokud je počítač vypnut v okamžiku, kdy je třeba provést změny, čas RTC se nezmění. Ale pro servery nebo jiné hostitele, které běží neustále, to není problém. Kromě toho jakákoli služba, která zajišťuje synchronizaci času NTP, upraví čas hostitele již v počátečním stadiu zavádění, takže po dokončení zavádění bude čas opět správný.
Nastavení časového pásma
Obvykle určujete časové pásmo během instalačního procesu a není nutné ho později měnit. Existují však případy, kdy je třeba časové pásmo změnit. Existuje několik nástrojů, které mohou pomoci. Pro určení místního časového pásma hostitele používá Linux soubory časových pásem. Tyto soubory se nacházejí v adresáři /usr/share/zoneinfo. Ve výchozím nastavení pro mé časové pásmo systém zapisuje toto: /etc/ localtime -> ../usr/share/zoneinfo/America/New_York. Ale nepotřebujete znát tyto jemnosti k tomu, abyste změnili časové pásmo.
Hlavní je znát oficiální název časového pásma pro vaši lokalitu a odpovídající příkaz. Řekněme, že chcete změnit časové pásmo na Los Angeles:
[root@testvm2 ~]# timedatectl list-timezones | column
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/HelsinkiNyní můžete nastavit časové pásmo. Použil jsem příkaz date pro kontrolu změn, ale můžete také použít timedatectl:
[root@testvm2 ~]# date
Út 19 Květen 2020 16:47:49 EDT
[root@testvm2 ~]# timedatectl set-timezone America/Los_Angeles
[root@testvm2 ~]# date
Út 19 Květen 2020 13:48:23 PDT
[root@testvm2 ~]#Nyní můžete opět změnit časové pásmo svého hostitele na místní čas.
systemd-timesyncd
Démon systemd timesync poskytuje implementaci NTP, kterou lze snadno spravovat v rámci systemd. Je ve výchozím nastavení nainstalován ve Fedoře a Ubuntu. Spouští se však ve výchozím nastavení pouze v Ubuntu. Ostatní distribuce nejsem si jistý. Můžete si to ověřit sami:
[root@testvm1 ~]# systemctl status systemd-timesyncdKonfigurace systemd-timesyncd
Konfigurační soubor pro systemd-timesyncd je /etc/systemd/timesyncd.conf. Je to jednoduchý soubor s menším počtem povolených možností než ve starších službách NTP a chronyd. Zde je obsah tohoto souboru (bez dalších změn) na mém virtuálním stroji s Fedoře:
# 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=2048Jediná sekce, kterou obsahuje, kromě komentářů, je [Time]. Všechny ostatní řádky jsou zakomentovány. Jsou to výchozí hodnoty, které není třeba měnit (pokud k tomu nemáte důvod). Pokud nemáte server NTP definovaný v řádku NTP =, výchozí rezervní server času ve Fedoře se používá. Obvykle přidávám svůj server času:
NTP=myntpserverSpuštění timesync
Můžete spustit a aktivovat systemd-timesyncd takto:
[root@testvm2 ~]# systemctl enable systemd-timesyncd.service
Vytvořil symlink /etc/systemd/system/dbus-org.freedesktop.timesync1.service → /usr/lib/systemd/system/systemd-timesyncd.service.
Vytvořil 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 ~]#Nastavení hardwarových hodin
Takto vypadá situace po spuštění timesyncd:
[root@testvm2 systemd]# timedatectl
Místní čas: So 2020-05-16 14:34:54 EDT
Univerzální čas: So 2020-05-16 18:34:54 UTC
RTC čas: So 2020-05-16 14:34:53
Časové pásmo: America/New_York (EDT, -0400)
Systémový čas synchronizován: ano
NTP služba: aktivní
RTC v místním TZ: ne Původně se mezi RTC a místním časem (EDT) rozdíl pohybuje maximálně v řádu sekund a během následujících několika dní se rozdíl ještě o pár sekund zvýší. Protože RTC nemá pojem o časových zónách, musí příkaz timedatectl provést srovnání, aby určil potřebnou časovou zónu. Pokud čas RTC přesně neodpovídá místnímu času, pak to znamená, že neodpovídá ani místní časové zóně.
V hledání dalších informací jsem zkontroloval stav systemd-timesync a zjistil jsem toto:
[root@testvm2 systemd]# systemctl status systemd-timesyncd.service
● systemd-timesyncd.service - Synchronizace času v síti
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: "Počáteční synchronizace s časovým serverem 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]: Čas systémového hodin nebyl nastaven nebo byl posunut zpět, obnovuje se z uloženého časového razítka: 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]: Počáteční synchronizace s časovým serverem 163.237.218.19:123 (2.fedora.pool.ntp.org).
[root@testvm2 systemd]#Všimněte si zprávy v protokolu, která uvádí, že systémový čas není nastaven nebo byl vrácen zpět. Služba Timesync nastavuje systémový čas na základě časového razítka. Časová razítka jsou udržována démonem timesync a vytvářena při každé úspěšné synchronizaci.
Příkaz timedatectl nemá možnost převzít hodnotu hardwarových hodin ze systémových hodin. Může nastavit čas a datum pouze na základě hodnoty zadané v příkazovém řádku. Můžete nastavit RTC na stejnou hodnotu jako systémový čas pomocí příkazu hwclock:
[root@testvm2 ~]# /sbin/hwclock --systohc --localtime
[root@testvm2 ~]# timedatectl
Místní čas: Po 2020-05-18 13:56:46 EDT
Univerzální čas: Po 2020-05-18 17:56:46 UTC
RTC čas: Po 2020-05-18 13:56:46
Časová zóna: America/New_York (EDT, -0400)
Synchronizace systémového hodin: ano
NTP služba: aktivní
RTC v místní TZ: anoMožnost --localtime naznačuje, že hardwarové hodiny ukazují místní čas, nikoli UTC.
Proč vlastně potřebujete RTC?
Jakákoliv implementace NTP nastaví systémové hodiny při spuštění. A proč tedy RTC? Není to úplně tak: to se stane pouze v případě, že máte síťové připojení k časovému serveru. Mnoho systémů však nemá trvalý přístup k síťovému připojení, proto jsou hardwarové hodiny užitečné, aby mohl Linux na jejich základě nastavit systémový čas. To je lepší než nastavování času ručně, i když se může od skutečného času odchylovat.
Závěr
V tomto článku jsou uvedeny některé nástroje pro správu datumu, času a časových zón. Nástroj systemd-timesyncd poskytuje NTP klienta, který může synchronizovat čas na místním hostiteli s NTP serverem. Nicméně systemd-timesyncd neposkytuje serverovou službu, takže pokud potřebujete NTP server ve vaší síti, musíte použít něco jiného – například Chrony, který funguje jako server.
Preferuji mít jedinou implementaci pro všechny služby v mé síti, proto používám Chrony. Pokud nepotřebujete místní NTP server nebo pokud vám nevadí používat Chrony jako server a systemd-timesyncd jako SNTP klienta. Není potřeba využívat další možnosti Chrony jako klienta, pokud vám vyhovuje funkčnost systemd-timesyncd.
Ještě jedna poznámka: nejste povinni používat nástroje systemd pro implementaci NTP. Můžete použít starou verzi ntpd, Chrony nebo jinou implementaci NTP. Systemd se skládá z mnoha služeb; mnohé z nich jsou volitelné, takže je můžete vypnout a použít místo nich něco jiného. Není to obrovský monolitický monstrosity. Můžete nemít rádi systemd nebo jeho části, ale měli byste učinit informované rozhodnutí.
Mám rád implementaci NTP ve systemd, ale preferuji Chrony, protože lépe vyhovuje mým potřebám. To je Linux, baby -)
Na základě reklamy
VDSina nabízí , obrovský výběr operačních systémů pro automatickou instalaci, existuje možnost nainstalovat jakýkoli OS ze svého , pohodlné vlastního vývoje a denní platba. Připomínáme, že máme věčné servery, které jsou určitě nepodléhající času 😉
Zdroj: habr.com
