Většinu lidí zajímá čas. Vstáváme včas, abychom vykonali své ranní rituály a dojížděli do práce (pro mnohé z nás je to v dnešní době krátký výlet), udělali jsme si pauzu na oběd, dodrželi termín projektu, oslavili narozeniny a svátky, stihli letadlo a mnoho dalšího. .
Někteří z nás jsou dokonce posedlí s časem. Moje hodinky jsou na solární pohon a získávají přesný čas z Národního institutu pro standardy a technologie (NIST) ve Fort Collins v Coloradu prostřednictvím rádiové stanice časového signálu WWVB, která se tam nachází. Časové signály jsou synchronizovány s atomovými hodinami, které se také nacházejí ve Fort Collins. Můj Fitbit se synchronizuje s mým telefonem, který je synchronizován se serverem Network Time Protocol (NTP), který je nakonec synchronizován s atomovými hodinami.
Proč je čas důležitý pro počítače
Existuje mnoho důvodů, proč naše zařízení a počítače potřebují přesný čas. Například v bankovnictví, na akciových trzích a v jiných finančních podnicích musí být transakce udržovány ve správném pořadí a přesné časové sekvence jsou pro to rozhodující.
Naše telefony, tablety, auta, systémy GPS a počítače vyžadují přesné nastavení času a data. Chci, aby hodiny na ploše mého počítače byly správné, abych se mohl spolehnout na to, že mi aplikace místního kalendáře zobrazí připomenutí ve správný čas. Správný čas také zajišťuje, že se úlohy cron SystemV a časovače systemd spouštějí ve správný čas.
Správný čas je také důležitý pro protokolování, takže je o něco snazší najít konkrétní položky protokolu na základě času. Například jsem kdysi pracoval v DevOps (tehdy se to tak nejmenovalo) pro e-mailový systém státu Severní Karolína. Dříve jsme zpracovávali více než 20 milionů e-mailů denně. Sledování stopy e-mailu přes řadu serverů nebo určení přesné sekvence událostí pomocí souborů protokolu na geograficky rozptýlených hostitelích může být mnohem snazší, když příslušné počítače dodržují přesné časy.
Vícekrát
Hostitelé Linuxu musí vzít v úvahu dva časy:systémový čas a čas RTC. RTC je zkratka pro hodiny reálného času, což je luxusní a nepříliš přesné označení pro systémové hardwarové hodiny.
Hardwarové hodiny běží nepřetržitě, i když je počítač vypnutý, pomocí baterie na základní desce systému. Primární funkcí RTC je uchovávat čas, když není k dispozici připojení k časovému serveru. V temných dobách osobních počítačů neexistoval internet pro připojení k časovému serveru, takže jediný čas, který měl počítač k dispozici, byly vnitřní hodiny. Operační systémy se musely spoléhat na RTC při spouštění a uživatel musel ručně nastavit systémový čas pomocí konfiguračního rozhraní hardwarového BIOSu, aby se ujistil, že je správný.
Hardwarové hodiny nerozumí konceptu časových pásem; v RTC je uložen pouze čas, nikoli časové pásmo ani odchylka od UTC (Universal Coordinated Time, který je také známý jako GMT nebo Greenwichský čas). RTC můžete nastavit pomocí nástroje, který prozkoumám později v tomto článku.
Systémový čas je čas známý operačnímu systému. Je to čas, který vidíte na hodinách GUI na ploše, ve výstupu z date
příkaz, v časových razítkách pro protokoly a v přístupu k souboru, časy úprav a změn.
rtc
manuálová stránka obsahuje úplnější diskusi o RTC a systémových hodinách a funkčnosti RTC.
A co NTP?
Počítače na celém světě používají protokol NTP (Network Time Protocol) k synchronizaci času s internetovými standardními referenčními hodinami prostřednictvím hierarchie serverů NTP. Primární časové servery jsou na vrstvě 1 a jsou připojeny přímo k různým národním časovým službám ve vrstvě 0 přes satelit, rádio nebo dokonce modemy přes telefonní linky. Časové služby ve vrstvě 0 mohou být atomové hodiny, rádiový přijímač, který je naladěn na signály vysílané atomovými hodinami, nebo přijímač GPS využívající vysoce přesné hodinové signály vysílané satelity GPS.
Další zdroje pro Linux
- Cheat pro příkazy Linuxu
- Cheat sheet pro pokročilé příkazy systému Linux
- Bezplatný online kurz:Technický přehled RHEL
- Síťový cheat pro Linux
- Cheat sheet SELinux
- Cheat pro běžné příkazy pro Linux
- Co jsou kontejnery systému Linux?
- Naše nejnovější články o Linuxu
Aby časové požadavky od časových serverů nebo klientů nižších v hierarchii (tj. s vyšším číslem vrstvy) nepřehlušily primární referenční servery, je otevřeno několik tisíc veřejných serverů NTP vrstvy 2, které mohou používat všichni. Mnoho organizací a uživatelů (včetně mě) s velkým počtem hostitelů, kteří potřebují server NTP, se rozhodlo nastavit své vlastní časové servery, takže pouze jeden místní hostitel přistupuje k vrstvě 2 nebo 3 časových serverů. Poté nakonfigurují zbývající hostitele v síti tak, aby používali místní časový server. V případě mé domácí sítě je to server vrstvy 3.
Možnosti implementace NTP
Původní implementace NTP je ntpd , a k němu se připojily dva novější, chronyd a systemd-timesyncd . Všechny tři udržují čas místního hostitele synchronizovaný s časovým serverem NTP. Služba systemd-timesyncd není tak robustní jako chronyd, ale pro většinu účelů je dostatečná. Může provádět velké časové skoky, pokud je RTC daleko mimo synchronizaci, a může postupně upravovat systémový čas, aby zůstal v synchronizaci se serverem NTP, pokud se místní systémový čas trochu posune. Službu systemd-timesync nelze použít jako časový server.
Chrony je implementace NTP obsahující dva programy:démona chronyd a rozhraní příkazového řádku nazvané chronyc. Jak jsem vysvětlil v předchozím článku, Chrony má některé funkce, díky kterým je nejlepší volbou pro mnoho prostředí, zejména:
- Chrony se může synchronizovat s časovým serverem mnohem rychleji než stará služba ntpd. To je dobré pro notebooky nebo stolní počítače, které neběží neustále.
- Umí kompenzovat kolísající taktovací frekvence, například když hostitel přejde do režimu spánku nebo hibernace, nebo když se rychlost hodin mění v důsledku krokování frekvence, které zpomaluje takt při nízké zátěži.
- Zvládá přerušovaná síťová připojení a saturaci šířky pásma.
- Přizpůsobuje se zpožděním a latenci sítě.
- Po počáteční synchronizaci času Chrony nikdy nezastaví hodiny. To zajišťuje stabilní a konzistentní č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ího hostitele nebo server aktualizovat ručně.
- Chrony může fungovat jako server NTP.
Aby bylo jasno, NTP je protokol, který je implementován na hostiteli Linuxu pomocí Chrony nebo systemd-timesyncd.service.
Balíčky NTP, Chrony a systemd-timesyncd RPM jsou dostupné ve standardních úložištích Fedory. Systemd-udev RPM je uzel zařízení a správce událostí jádra založený na pravidlech, který je standardně nainstalován s Fedorou, ale není povolen.
Můžete nainstalovat všechny tři a přepínat mezi nimi, ale je to utrpení a nestojí to za potíže. Moderní verze Fedory, CentOS a RHEL se přesunuly z NTP na Chrony jako jejich výchozí implementace měření času a také instalují systemd-timesyncd. Zjistil jsem, že Chrony funguje dobře, poskytuje lepší rozhraní než služba NTP, poskytuje mnohem více informací a zvyšuje kontrolu, což jsou všechny výhody pro správce systému.
Deaktivace ostatních služeb NTP
Je možné, že na vašem hostiteli již běží služba NTP. Pokud ano, musíte jej před přechodem na něco jiného deaktivovat. Používal jsem chronyd, takže jsem ho zastavil a deaktivoval pomocí následujících příkazů. Spusťte příslušné příkazy pro jakéhokoli démona NTP, který používáte na svém hostiteli:
[root@testvm1 ~]# systemctl zakázat chronyd; systemctl stop chronyd
Odstraněno /etc/systemd/system/multi-user.target.wants/chronyd.service.
[root@testvm1 ~]#
Ověřte, že je zastavena a deaktivována:
[root@testvm1 ~]# systemctl status chronyd
● chronyd.service – NTP klient/server
Načteno:načteno (/usr/lib/systemd/system/chronyd.service; zakázáno; dodavatel preset:enabled)
Aktivní:neaktivní (mrtvý)
Docs:man:chronyd(8)
man:chrony.conf(5)
[root@testvm1 ~]#Před spuštěním zkontrolujte stav
Stav systemd timesync udává, zda systemd spustil službu NTP. Protože jste ještě nespustili systemd NTP,
timesync-status
příkaz nevrací žádná data:[root@testvm1 ~]# timedatectl timesync-status
Dotaz na server se nezdařil:Nelze aktivovat vzdálený partner.Ale rovnou
status
žádost poskytuje některé důležité informace. Napříkladtimedatectl
příkaz bez argumentu nebo voleb implikujestatus
dílčí příkaz jako výchozí:[root@testvm1 ~]# stav timedatectl
Místní čas:Pá 2020-05-15 08:43:10 EDT
Univerzální čas:Pá 2020-05-43:15 15 UTC
RTC Čas:Pá 2020-05-15 08:43:08
Časová zóna:Amerika / New_york (EDT, -0400)
Systémové hodiny Synchronizovány:Ne
NTP Služba:neaktivní
RTC v místním TZ:ano
Upozornění:Systém je nakonfigurován tak, aby četl čas RTC v místním časovém pásmu. Způsobí to různé problémy
se změnami časového pásma a úpravami letního času. Čas RTC
Čas se nikdy neaktualizuje, jeho udržování závisí na externích zařízeních.
Pokud je to možné, použijte RTC v UTC zavoláním
'timedatectl set-local-rtc 0'.
[root@testvm1 ~]#Tím se vrátí místní čas vašeho hostitele, čas UTC a čas RTC. Ukazuje, že systémový čas je nastaven na
America/New_York
časové pásmo (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 trochu posunout od systémového času. To je normální u systémů, jejichž hodiny nebyly synchronizovány. Velikost driftu na hostiteli závisí na množství času od poslední synchronizace systému a rychlosti driftu za jednotku času.Je zde také varovná zpráva o používání místního času pro RTC – to se týká změn časového pásma a úprav letního času. Pokud je počítač v době, kdy je třeba provést změny, vypnutý, čas RTC se nezmění. To není problém na serverech nebo jiných hostitelích, kteří jsou napájeni 24/7. Každá služba, která poskytuje synchronizaci času NTP, také zajistí, že hostitel je nastaven na správný čas na začátku procesu spouštění, takže bude správný, než bude plně spuštěn.
Nastavte časové pásmo
Obvykle nastavíte časové pásmo počítače během instalační procedury a nemusíte ho nikdy měnit. Někdy je však nutné změnit časové pásmo a existuje několik nástrojů, které vám pomohou. Linux používá soubory časového pásma k definování místního časového pásma používaného hostitelem. Tyto binární soubory jsou umístěny v
/usr/share/zoneinfo
adresář. Výchozí pro mé časové pásmo je definováno odkazem/etc/localtime -> ../usr/share/zoneinfo/America/New_York
. Ale ke změně časového pásma to vědět nepotřebujete.Musíte však znát oficiální název časového pásma pro vaši polohu. Řekněme, že chcete změnit časové pásmo na Los Angeles:
[root@testvm2 ~]# timedatectl seznam-časových pásem | Sloupec
Amerika / LA_PAZ Europe / Budapešť
Amerika / Lima Europe / Chisinau
Amerika / Los_angeles Europe / Copenhagen
Amerika / Maceio Europe / Dublin
Amerika/Managua Evropa/Gibraltar
Amerika/Manaus Evropa/HelsinkiNyní můžete nastavit časové pásmo. Použil jsem
date
příkaz k ověření změny, ale můžete také použíttimedatectl
:[root@testvm2 ~]# datum
út 19. května 2020 16:47:49 EDT
[root@testvm2 ~]# timedatectl set-timezone America/Los_Angeles
[root @testvm2 ~]# datum
út 19. května 2020 13:48:23 PDT
[root@testvm2 ~]#Nyní můžete změnit časové pásmo svého hostitele zpět na místní.
systemd-timesyncd
Démon systemd timesync poskytuje implementaci NTP, kterou lze snadno spravovat v kontextu systemd. Ve Fedoře a Ubuntu se standardně instaluje a ve výchozím nastavení se spouští v Ubuntu, ale ne ve Fedoře. Nejsem si jistý jinými distribucemi; můžete zkontrolovat svůj pomocí:
[root@testvm1 ~]# systemctl status systemd-timesyncd
Konfigurovat systemd-timesyncd
Konfigurační soubor pro systemd-timesyncd je
/etc/systemd/timesyncd.conf
. Je to jednoduchý soubor s méně zahrnutými možnostmi než starší služba NTP a chronyd. Zde je úplný obsah výchozí verze tohoto souboru na mém virtuálním počítači Fedora:# Tento soubor je součástí systemd.
#
# systemd je svobodný software; můžete jej dále distribuovat a/nebo upravovat
# za podmínek GNU Lesser General Public License, jak je zveřejněno
# Free Software Foundation; buď verze 2.1 licence, nebo
# (podle vašeho uvážení) jakákoli pozdější verze.
#
# Záznamy v tomto souboru zobrazují výchozí čas kompilace.
# Můžete změnit nastavení úpravou tohoto souboru.
# Výchozí nastavení lze obnovit jednoduchým smazáním tohoto souboru.
#
# Podrobnosti viz timesyncd.conf(5).
[ Čas]
#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, která obsahuje kromě komentářů, je
[Time]
a všechny řádky jsou zakomentovány. Toto jsou výchozí hodnoty a není třeba je měnit ani odkomentovat (pokud k tomu nemáte důvod). Pokud nemáte konkrétní časový server NTP definovaný vNTP=
řádek, výchozím nastavením Fedory je vrátit se k fondu časových serverů Fedory. Rád bych přidal časový server ve své síti na tento řádek:NTP=myntpserver
Start timesync
Spuštění a povolení systemd-timesyncd je stejné jako u jakékoli jiné služby:
[root@testvm2 ~]# systemctl povolit systemd-timesyncd.service
Vytvořen symbolický odkaz /etc/systemd/system/dbus-org.freedesktop.timesync1.service → /usr/lib/systemd/system/systemd -timesyncd.service.
Vytvořen symbolický odkaz /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 ~]#Nastavte hardwarové hodiny
Zde je, jak vypadal jeden z mých systémů po spuštění timesyncd:
[root@testvm2 systemd]# timedatectl
Místní čas:So 2020-05-16 14:34:54 EDT
Univerzální čas:So 4-1620-05 Br /> RTC Čas:So 2020-05-16 14:34:53
Časová zóna:Amerika / New_york (EDT, -0400)
Systémové hodiny Synchronizace:Ano
NTP Služba:Aktivní
RTC v místním TZ:neČas RTC se oproti místnímu času (EDT) liší přibližně o sekundu a nesrovnalost se během několika příštích dní ještě o několik sekund zvětší. Protože RTC nemá koncept časových pásem,
timedatectl
příkaz musí provést srovnání, aby určil, které časové pásmo se shoduje. Pokud se čas RTC přesně neshoduje s místním časem, není považován za v místním časovém pásmu.Při hledání trochu více informací jsem zkontroloval stav systemd-timesync.service a našel:
[root@testvm2 systemd]# systemctl status systemd-timesyncd.service
● systemd-timesyncd.service – Synchronizace času v síti
Načteno:načteno (/usr/lib/systemd/system/systemd- timesyncd.service; povoleno; přednastaveno dodavatelem:zakázáno)
Aktivní:aktivní (běží) od So 2020-05-16 13:56:53 EDT; před 18 hodinami
Dokumenty:man:systemd-timesyncd.service(8)
Hlavní PID:822 (systemd-timesyn)
Stav:"Počáteční synchronizace s časovým serverem 163.237.218.19:123 (2 .fedora.pool.ntp.org)."
Úkoly:2 (limit:10365)
Paměť:2,8 M
CPU:476 ms
CGroup:/system.slice/systemd -timesyncd.service
└─822 /usr/lib/systemd/systemd-timesyncd
16. května 09:57:24 testvm2.both.org systemd[1]:Spouštění síťové synchronizace času ...
May 16 09:57:24 testvm2.both.org systemd-timesyncd[822]:Čas systémových hodin nebyl nastaven nebo skočil zpět, obnovuje se ze zaznamenaného časového razítka:So 2020-05-16 13:56:53 EDT
16. května 13:56:53 testvm2.both.org systemd[1]:Spuštěna synchronizace času v síti.
16. května 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 protokolu, která říká, že čas systémových hodin nebyl nastaven nebo přeskočil zpět. Služba timesync nastavuje systémový čas z časového razítka. Časová razítka jsou udržována démonem timesync a jsou vytvářena při každé úspěšné synchronizaci času.
timedatectl
příkaz nemá možnost nastavit hodnotu hardwarových hodin ze systémových hodin; může nastavit čas a datum pouze z hodnoty zadané na příkazovém řádku. Můžete však nastavit RTC na stejnou hodnotu jako systémový čas pomocíhwclock
příkaz:[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
Čas RTC:Po 2020-05-18 ED Time:T_ br-18 13:56:46 Americké , -0400)
Systémové hodiny synchronizovány:ano
Služba NTP:aktivní ano
>
--localtime
volba zajišťuje, že hardwarové hodiny jsou nastaveny na místní čas, nikoli na UTC.Opravdu potřebujete RTC?
Jakákoli implementace NTP nastaví systémové hodiny během spouštěcí sekvence, je tedy nutné RTC? Vlastně ne, pokud 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í, takže hardwarové hodiny jsou užitečné, aby je Linux mohl přečíst a nastavit systémový čas. Je to lepší řešení, než kdybyste museli čas nastavovat ručně, i když se může od skutečného času odchýlit.
Přehled
Tento článek prozkoumal použití některých nástrojů systemd pro správu data, času a časových pásem. Nástroj systemd-timesyncd poskytuje slušného klienta NTP, který dokáže udržovat čas na místním hostiteli synchronizovaný se serverem NTP. Systemd-timesyncd však neposkytuje službu serveru, takže pokud potřebujete NTP server ve své síti, musíte jako server použít něco jiného, například Chrony.
Preferuji mít jedinou implementaci pro jakoukoli službu v mé síti, takže používám Chrony. Pokud nepotřebujete místní NTP server nebo pokud vám nevadí pracovat s Chrony pro server a systemd-timesyncd pro klienta a nepotřebujete další funkce Chrony, pak je systemd-timesyncd vhodnou volbou pro klienta NTP. .
Je tu ještě jedna věc, kterou chci zdůraznit:Pro implementaci NTP nemusíte používat systemd nástroje. Můžete použít starý ntpd nebo Chrony nebo nějakou jinou implementaci NTP. systemd se skládá z velkého množství služeb; mnoho z nich je volitelných, takže je lze deaktivovat a místo nich použít něco jiného. Není to to obrovské, monolitické monstrum, za které to někteří dělají. Je v pořádku nemít rád systemd nebo jeho části, ale měli byste učinit informované rozhodnutí.
Nelíbí se mi implementace NTP od systemd, ale mnohem raději mám Chrony, protože lépe vyhovuje mým potřebám. A o tom je Linux.
Zdroje
Na internetu je k dispozici velké množství informací o systemd, ale mnohé jsou stručné, tupé nebo dokonce zavádějící. Kromě zdrojů zmíněných v tomto článku nabízejí následující webové stránky podrobnější a spolehlivější informace o spouštění systemd.
- Projekt Fedora má dobrého praktického průvodce systemd. Obsahuje téměř vše, co potřebujete vědět, abyste mohli nakonfigurovat, spravovat a udržovat počítač Fedora pomocí systemd.
- Projekt Fedora má také dobrý cheat sheet, který křížově odkazuje na staré příkazy SystemV se srovnatelnými příkazy systemd.
- Podrobné technické informace o systemd a důvodech pro jeho vytvoření naleznete v popisu systemd na Freedesktop.org.
- Pokročilejší systémové informace a tipy nabízí stránka Linux.com „More systemd fun“.
Existuje také řada hluboce technických článků pro správce systému Linux od Lennarta Poetteringa, návrháře a primárního vývojáře systemd. Tyto články byly napsány mezi dubnem 2010 a zářím 2011, ale nyní jsou stejně aktuální jako tehdy. Většina všeho dobrého, co bylo napsáno o systemd a jeho ekosystému, je založeno na těchto dokumentech.
- Přehodnocení PID 1
- systemd pro administrátory, část I
- systemd pro administrátory, část II
- systemd pro administrátory, část III
- systemd pro administrátory, část IV
- systemd pro administrátory, část V
- systemd pro administrátory, část VI
- systemd pro administrátory, část VII
- systemd pro administrátory, část VIII
- systemd pro administrátory, část IX
- systemd pro administrátory, část X
- systemd pro administrátory, část XI