GNU/Linux >> Znalost Linux >  >> Linux

Ovládejte čas a datum svého počítače pomocí systemd

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říklad timedatectl příkaz bez argumentu nebo voleb implikuje status 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/Helsinki

Nyní můžete nastavit časové pásmo. Použil jsem date příkaz k ověření změny, ale můžete také použít timedatectl :

[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=2048

Jediná 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ý v NTP= řá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

Linux
  1. Nastavte systémové datum a čas pomocí C++ v Linuxu

  2. Získání data a času spuštění systému v Linuxu

  3. V Linuxu, jak vytvořit soubor s názvem, který je aktuální datum a čas

  1. Nahrajte svůj terminál pomocí skriptu a scriptreplay

  2. [Vyřešeno]:Jak zabránit synchronizaci hodin virtuálního počítače s hostitelským počítačem a nastavit nezávislý čas?

  3. Hledání a mazání souborů s konkrétním datem

  1. Zvyšte úroveň své historie shellu s Loki a fzf

  2. Jak zobrazit datum a čas restartu systému Linux

  3. Historie příkazů Linuxu s datem a časem