
De meeste mensen letten op de tijd. We staan op tijd op om onze ochtendrituelen te voltooien en naar het werk te gaan, een lunchpauze te nemen, deadlines voor projecten te halen, verjaardagen en feestdagen te vieren, een vliegtuig te nemen, enzovoort.
Bovendien zijn sommigen van ons geobsedeerd door tijd. Mijn horloge wordt gevoed door zonne-energie en ontvangt de exacte tijd van het National Institute of Standards and Technology () in Fort Collins, Colorado, via een langegolf radiostation . De tijdsignalen worden gesynchroniseerd met atoomklokken, die ook in Fort Collins zijn gevestigd. Mijn Fitbit synchroniseert met mijn telefoon, die synchroniseert met de server , die uiteindelijk wordt gesynchroniseerd met de atoomklokken.
Ook apparaten houden de tijd bij.
Er zijn veel redenen waarom onze apparaten en computers nauwkeurige tijd nodig hebben. Bijvoorbeeld in de banksector, op de aandelenmarkten en andere financiƫle instellingen moeten transacties in de juiste volgorde worden uitgevoerd, en daarvoor zijn nauwkeurige tijdsequenties cruciaal.
Onze telefoons, tablets, auto's, GPS-systemen en computers vereisen een nauwkeurige tijds- en datumnotatie. Ik wil dat de klok op mijn computerscherm de juiste tijd aangeeft. Ik wil dat mijn lokale kalender herinneringen op het juiste moment toont. De juiste tijd zorgt er ook voor dat cron-taken en systemd op het juiste moment worden uitgevoerd.
Datum en tijd zijn ook belangrijk voor logging, zodat het gemakkelijker wordt om bepaalde logs te vinden op basis van datum en tijd. Bijvoorbeeld, ik werkte ooit in DevOps (toen nog niet zo genoemd) en was bezig met het opzetten van een e-mailsysteem in North Carolina. We verwerkten eerder meer dan 20 miljoen e-mails per dag. Het volgen van e-mail door een serie servers of het vaststellen van de exacte volgorde van gebeurtenissen met behulp van logbestanden op geografisch verspreide hosts kan veel eenvoudiger zijn als de overeenkomstige computers op tijd gesynchroniseerd zijn.
Tijd is ƩƩn ding ā klokken zijn veel.
Linux-hosts moeten rekening houden met het feit dat er systeemtijd en RTC-tijd is. RTC (Real Time Clock) is een beetje een vreemde en niet bijzonder nauwkeurige naam voor hardwareklokken.
De hardwareklok werkt continu, zelfs wanneer de computer is uitgeschakeld, door gebruik te maken van een batterij op het moederbord van het systeem. De voornaamste functie van de RTC is het bijhouden van de tijd wanneer de verbinding met de tijdserver niet beschikbaar is. In tijden waarin verbinding met een tijdserver via internet niet mogelijk was, moest elke computer nauwkeurige interne klokken hebben. Besturingssystemen moesten tijdens het opstarten een beroep doen op de RTC, en de gebruiker moest handmatig de systeemtijd instellen met behulp van de BIOS-configuratie-interface om ervoor te zorgen dat deze correct was.
De hardwareklok begrijpt het concept van tijdzones niet; in de RTC wordt alleen de tijd opgeslagen, niet de tijdzone of de afwijking van UTC (Coƶrdinated Universal Time, ook bekend als GMT of Greenwich Mean Time). U kunt de RTC instellen met een tool die ik later in dit artikel zal bespreken.
De systeemtijd is de tijd die het besturingssysteem toont op de GUI-klokken op uw bureaublad, in de uitvoer van de datumcommando, in de tijdstempels van logboeken. Dit verwijst ook naar de tijd van het maken, wijzigen en openen van bestanden.
Op de pagina er is een volledige beschrijving van RTC en systeemklokken.
Wat is er met NTP?
Computers over de hele wereld gebruiken NTP (Network Time Protocol) om hun tijd te synchroniseren met standaard referentietijden via internet met behulp van een hiƫrarchie van NTP-servers. De primaire tijdservers bevinden zich op niveau 1 en zijn rechtstreeks verbonden met verschillende nationale tijddiensten op niveau 0 via satelliet, radio of zelfs modems over telefoonlijnen. Tijddiensten op niveau 0 kunnen atoomklokken zijn, een radio ontvanger die is afgesteld op signalen van atoomklokken, of een GPS-ontvanger die gebruik maakt van hoogprecisie-tijdsignalen die door GPS-satellieten worden verzonden.
Op de meeste referentservers zijn er duizenden openbare NTP-servers van stratum 2 beschikbaar voor iedereen. Veel organisaties en gebruikers (inclusief ikzelf) met veel hosts die een NTP-server nodig hebben, geven de voorkeur aan het opzetten van hun eigen tijdservers, zodat slechts ƩƩn lokale host een beroep doet op stratum 2 of 3. Daarna configureren ze de overige knooppunten in het netwerk om de lokale tijdserver te gebruiken. In het geval van mijn thuisnetwerk is dit een stratum 3-server.
Verschillende implementaties van NTP
De oorspronkelijke implementatie van NTP is ntpd. Vervolgens kwamen er twee nieuwere bij: chronyd en systemd-timesyncd. Alle drie synchroniseren ze de tijd van de lokale host met de NTP-tijdserver. De service systemd-timesyncd is niet zo betrouwbaar als chronyd, maar is voldoende voor de meeste doeleinden. Als de RTC niet is gesynchroniseerd, kan deze geleidelijk de systeemtijd corrigeren om zich te synchroniseren met de NTP-server wanneer de lokale systeemtijd iets verschuift. De service systemd-timesync kan niet worden gebruikt als tijdserver.
ā dit is een implementatie van NTP die twee programma's bevat: de daemon chronyd en een opdrachtregelinterface genaamd chronyc. Chrony heeft verschillende functies die in veel gevallen simpelweg onmisbaar zijn:
- Chrony kan zich veel sneller synchroniseren met een tijdserver dan de oudere service ntpd. Dit is gunstig voor laptops of desktopcomputers die niet continu draaien.
- Het kan fluctuaties in klokkensnelheden compenseren, bijvoorbeeld wanneer een host in de slaapstand gaat of wanneer de kloksnelheid verandert door een abrupte wijziging in de frequentie waardoor de kloksnelheden bij lage belasting vertragen.
- Het lost tijdgerelateerde problemen op die voortkomen uit een instabiele netwerkverbinding of netwerkoverbelasting.
- Het reguleert netwerkvertragingen.
- Na de initiƫle tijdsynchronicatie stopt Chrony nooit met de klok. Dit zorgt voor stabiele en consistente tijdsintervallen voor veel systeemservices en toepassingen.
- Chrony kan zelfs zonder netwerkverbinding functioneren. In dit geval kan de lokale host of server handmatig worden bijgewerkt.
- Chrony kan fungeren als een NTP-server.
Nogmaals: NTP is een protocol dat geĆÆmplementeerd kan worden op een Linux-host met behulp van Chrony of systemd-timesyncd.
RPM-pakketten voor NTP, Chrony en systemd-timesyncd zijn beschikbaar in de standaard repositories van Fedora. RPM systemd-udev is een kernelgebeurtenisbeheerder die standaard in Fedora is geĆÆnstalleerd, maar niet verplicht is om te gebruiken.
Je kunt alle drie installeren en tussen hen wisselen, maar dat zal extra gedoe opleveren. Het is dus beter om dit niet te doen. Moderne versies van Fedora, CentOS en RHEL zijn overgestapt op Chrony als standaardimplementatie, en ze hebben ook systemd-timesyncd. Ik vind dat Chrony goed werkt, een betere interface biedt dan de NTP-service, veel meer informatie geeft en meer controle biedt, wat systeembeheerders zeker zal aanspreken.
NTP-services uitschakelen
Het is mogelijk dat op jouw host al een NTP-service draait. Als dat zo is, moet je deze uitschakelen voordat je naar iets anders overstapt. Ik had chronyd draaien, dus gebruikte ik de volgende commando's om het te stoppen en uit te schakelen. Voer de bijbehorende commando's uit voor elke NTP-daemon die je gebruikt op jouw host:
[root@testvm1 ~]# systemctl disable chronyd ; systemctl stop chronyd
Verwijderd /etc/systemd/system/multi-user.target.wants/chronyd.service.
[root@testvm1 ~]#Controleer of de service is gestopt en uitgeschakeld:
[root@testvm1 ~]# systemctl status chronyd
ā chronyd.service - NTP client/server
Loaded: geladen (/usr/lib/systemd/system/chronyd.service; uitgeschakeld; vendor preset: ingeschakeld)
Active: inactief (dood)
Docs: man:chronyd(8)
man:chrony.conf(5)
[root@testvm1 ~]#Status controleren voordat je het start
De status van de systeemkloksynchronisatie laat zien of de NTP-service draait. Aangezien je NTP nog niet hebt gestart, zal de command timesync-status hint geven:
[root@testvm1 ~]# timedatectl timesync-status
Kon server niet opvragen: Kon externe peer niet activeren.Een directe statusopdracht geeft belangrijke informatie. Bijvoorbeeld, het commando timedatectl zonder argumenten of parameters voert standaard de subopdracht status uit:
[root@testvm1 ~]# timedatectl status
Lokale tijd: Vrij 2020-05-15 08:43:10 EDT
Universele tijd: Vrij 2020-05-15 12:43:10 UTC
RTC tijd: Vrij 2020-05-15 08:43:08
Tijdzone: America/New_York (EDT, -0400)
Systeemklok gesynchroniseerd: nee
NTP-service: inactief
RTC in lokale TZ: ja
Waarschuwing: Het systeem is geconfigureerd om de RTC-tijd in de lokale tijdzone te lezen.
Deze modus kan niet volledig worden ondersteund. Het zorgt voor verschillende problemen
met tijdzonewijzigingen en aanpassingen voor de zomertijd. De RTC
tijd wordt nooit bijgewerkt, deze is afhankelijk van externe voorzieningen om deze bij te houden.
Als het mogelijk is, gebruik RTC in UTC door
'timedatectl set-local-rtc 0' aan te roepen.
[root@testvm1 ~]#Op deze manier krijgt u de lokale tijd voor uw host, UTC-tijd en RTC-tijd. In dit geval is de systeemtijd ingesteld op de tijdzone America/New_York (TZ), RTC is ingesteld op de tijd in de lokale tijdzone, en de NTP-service is niet actief. De RTC-tijd begint iets uit te lopen ten opzichte van de systeemtijd. Dit is normaal voor systemen waarvan de klok niet is gesynchroniseerd. De mate van afwijking op de host hangt af van de tijd die verstreken is sinds de laatste synchronisatie van het systeem.
We hebben ook een waarschuwing gekregen over het gebruik van lokale tijd voor RTC ā dit betreft tijdzonewijzigingen en zomertijdinstellingen. Als de computer is uitgeschakeld op het moment dat wijzigingen moeten worden aangebracht, zal de RTC-tijd niet veranderen. Maar voor servers of andere hosts die 24/7 draaien, is dit helemaal geen probleem. Bovendien zal elke dienst die tijdsynchronisatie via NTP biedt, de tijd van de host corrigeren aan het begin van de opstart, zodat de tijd na de opstart weer correct zal zijn.
Instellen van de tijdzone
Meestal geeft u de tijdzone op tijdens de installatieprocedure, en heeft u verder geen taak om deze te wijzigen. Er zijn echter situaties waarin het nodig is om de tijdzone te wijzigen. Er zijn verschillende tools die kunnen helpen. Om de lokale tijdzone te bepalen, gebruikt Linux de tijdzonebestanden. Deze bestanden bevinden zich in de map /usr/share/zoneinfo. Standaard schrijft het systeem dit voor mijn tijdzone: /etc/ localtime -> ../usr/share/zoneinfo/America/New_York. Maar u hoeft dergelijke details niet te weten om de tijdzone te wijzigen.
Het belangrijkste is dat u de officiƫle naam van de tijdzone voor uw locatie kent en de bijbehorende opdracht. Stel dat u de tijdzone naar Los Angeles wilt wijzigen:
[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/HelsinkiNu kunt u de tijdzone instellen. Ik heb het commando date gebruikt om de wijzigingen te controleren, maar u kunt ook timedatectl gebruiken:
[root@testvm2 ~]# date
Di 19 mei 2020 04:47:49 PM EDT
[root@testvm2 ~]# timedatectl set-timezone America/Los_Angeles
[root@testvm2 ~]# date
Di 19 mei 2020 01:48:23 PM PDT
[root@testvm2 ~]#U kunt nu de tijdzone van uw host wijzigen naar de lokale tijd.
systemd-timesyncd
De systemd timesync daemon biedt een NTP-implementatie die eenvoudig te beheren is binnen de context van systemd. Het is standaard geĆÆnstalleerd in Fedora en Ubuntu. Het wordt echter standaard alleen in Ubuntu gestart. Ik ben niet zeker over andere distributies. U kunt zelf controleren:
[root@testvm1 ~]# systemctl status systemd-timesyncdConfiguratie van systemd-timesyncd
Het configuratiebestand voor systemd-timesyncd is /etc/systemd/timesyncd.conf. Het is een eenvoudig bestand met minder ingeschakelde opties dan in oudere NTP- en chronyd-services. Hier is de inhoud van dit bestand (zonder aanvullende wijzigingen) op mijn virtuele machine met Fedora:
# 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=2048De enige sectie die het bevat, naast de opmerkingen, is [Time]. Alle andere regels zijn gecommentarieerd. Dit zijn de standaardwaarden, deze hoeven niet te worden gewijzigd (tenzij u daar een reden voor hebt). Als u geen NTP-tijdserver hebt opgegeven in de regel NTP =, wordt standaard in Fedora een back-up tijdserver van Fedora gebruikt. Ik voeg meestal mijn tijdserver toe:
NTP=myntpserverTimesync starten
U kunt systemd-timesyncd als volgt starten en activeren:
[root@testvm2 ~]# systemctl enable systemd-timesyncd.service
Symlink aangemaakt /etc/systemd/system/dbus-org.freedesktop.timesync1.service ā /usr/lib/systemd/system/systemd-timesyncd.service.
Symlink aangemaakt /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 ~]#Instelling van de hardwareklokken
Hier ziet u de situatie na het starten van timesyncd:
[root@testvm2 systemd]# timedatectl
Lokale tijd: za 2020-05-16 14:34:54 EDT
Universele tijd: za 2020-05-16 18:34:54 UTC
RTC-tijd: za 2020-05-16 14:34:53
Tijdzone: America/New_York (EDT, -0400)
Systeemklok gesynchroniseerd: ja
NTP-service: actief
RTC in lokale TZ: nee Aanvankelijk verschilt de RTC-tijd niet meer dan een seconde van de lokale tijd (EDT), en de afwijking neemt de volgende dagen met nog een paar seconden toe. Aangezien er in de RTC geen concept van tijdzones is, moet het commando timedatectl een vergelijking uitvoeren om de juiste tijdzone te bepalen. Als de RTC-tijd niet exact overeenkomt met de lokale tijd, betekent dit dat deze ook niet overeenkomt met de lokale tijdzone.
Op zoek naar aanvullende informatie heb ik de status van systemd-timesync gecontroleerd en kwam ik dit tegen:
[root@testvm2 systemd]# systemctl status systemd-timesyncd.service
ā systemd-timesyncd.service - Netwerk Tijd Synchronisatie
Loaded: geladen (\/usr\/lib\/systemd\/system\/systemd-timesyncd.service; ingeschakeld; vendor preset: uitgeschakeld)
Active: actief (uitvoerend) sinds za 2020-05-16 13:56:53 EDT; 18u geleden
Docs: man:systemd-timesyncd.service(8)
Main PID: 822 (systemd-timesyn)
Status: "Initiƫle synchronisatie met tijdserver 163.237.218.19:123 (2.fedora.pool.ntp.org)."
Taken: 2 (limiet: 10365)
Geheugen: 2.8M
CPU: 476ms
CGroup: \/system.slice\/systemd-timesyncd.service
āā822 \/usr\/lib\/systemd\/systemd-timesyncd
16 mei 09:57:24 testvm2.both.org systemd[1]: Network Tijd Synchronisatie starten...
16 mei 09:57:24 testvm2.both.org systemd-timesyncd[822]: Systeemklok tijd is niet ingesteld of is teruggezet, herstel vanaf geregistreerde timestamp: za 2020-05-16 13:56:53 EDT
16 mei 13:56:53 testvm2.both.org systemd[1]: Network Tijd Synchronisatie gestart.
16 mei 13:57:56 testvm2.both.org systemd-timesyncd[822]: Initiƫle synchronisatie met tijdserver 163.237.218.19:123 (2.fedora.pool.ntp.org).
[root@testvm2 systemd]#Let op het logboekbericht waarin staat dat de systeemtijd niet is ingesteld of teruggezet. De Timesync-service stelt de systeemtijd in op basis van de tijdstempel. Tijdstempels worden ondersteund door de timesync-daemon en worden aangemaakt bij elke succesvolle synchronisatie.
Het commando timedatectl heeft niet de mogelijkheid om de waarde van de hardwareklok uit de systeemtijd te halen. Het kan de tijd en datum alleen instellen op basis van de waarde die in de opdrachtregel is ingevoerd. U kunt de RTC op dezelfde waarde instellen als de systeemtijd met het commando hwclock:
[root@testvm2 ~]# \/sbin\/hwclock --systohc --localtime
[root@testvm2 ~]# timedatectl
Lokale tijd: ma 2020-05-18 13:56:46 EDT
Universele tijd: ma 2020-05-18 17:56:46 UTC
RTC-tijd: ma 2020-05-18 13:56:46
Tijdzone: America\/New_York (EDT, -0400)
Systeemklok gesynchroniseerd: ja
NTP-service: actief
RTC in lokale TZ: jaDe optie ālocaltime geeft aan dat de hardwareklok de lokale tijd aangeeft en niet UTC.
Waarom heeft u überhaupt een RTC nodig?
Elke implementatie van NTP stelt de systeemtijd in bij het opstarten. Maar waarom dan RTC? Dat is niet helemaal juist: dit gebeurt alleen als je een netwerkverbinding met een tijdserver hebt. Veel systemen hebben echter geen constante toegang tot een netwerkverbinding, dus hardwareklokken zijn nuttig zodat Linux de systeemtijd op basis daarvan kan instellen. Dit is beter dan het tijdstip handmatig in te stellen, zelfs als het kan afwijken van de actuele tijd.
Conclusie
In dit artikel worden enkele tools voor het beheren van datum, tijd en tijdzones besproken. De tool systemd-timesyncd biedt een NTP-client die de tijd op de lokale host kan synchroniseren met een NTP-server. Systemd-timesyncd biedt echter geen serverdienst, dus als je een NTP-server in jouw netwerk nodig hebt, moet je iets anders gebruiken ā bijvoorbeeld Chrony, om als server te fungeren.
Ik geef er de voorkeur aan om ƩƩn enkele implementatie voor alle diensten in mijn netwerk te hebben, daarom gebruik ik Chrony. Als je geen lokale NTP-server nodig hebt, of als je geen bezwaar hebt tegen het gebruik van Chrony als server en systemd-timesyncd als SNTP-client. Er is immers geen noodzaak om de extra mogelijkheden van Chrony als client te gebruiken als je tevreden bent met de functionaliteit van systemd-timesyncd.
Een andere opmerking: je bent niet verplicht om systemd-tools te gebruiken voor de implementatie van NTP. Je kunt een oudere versie van ntpd, Chrony of een andere NTP-implementatie gebruiken. Systemd bestaat uit een groot aantal services; veel daarvan zijn optioneel, waardoor je ze kunt uitschakelen en in plaats daarvan iets anders kunt gebruiken. Het is geen enorme monolithische monster. Je hoeft systemd of delen ervan niet leuk te vinden, maar je moet een weloverwogen beslissing nemen.
Ik hou van de NTP-implementatie in systemd, maar ik geef de voorkeur aan Chrony omdat het beter aan mijn behoeften voldoet. Dit is Linux, schat -)
Adverteervermelding
VDSina biedt , een enorme keuze aan besturingssystemen voor automatische installatie, er is de mogelijkheid om elk OS van je eigen , gebruiksvriendelijke eigen ontwikkeling en dagelijkse betaling. Ter herinnering, we hebben eeuwige servers die echt niet onderhevig zijn aan de tijd š
Bron: habr.com
