Jende gehienak denboraren jarraipena egiten du. Garaiz jaikitzen gara goizeko errituak bete eta lanera joateko, bazkaltzeko atsedenaldi bat hartzeko, proiektuen epeak betetzeko, urtebetetzeak eta oporrak ospatzeko, hegazkinera igotzeko, etab.
Gainera: gutako batzuk denborarekin obsesionatuta gaude. Nire erlojua eguzki energiaz elikatzen da eta ordu zehatza lortzen du Estandar eta Teknologia Institutu Nazionaletik (
Gailuek ere denboraren jarraipena egiten dute
Gure gailuek eta ordenagailuek denbora zehatza behar duten arrazoi asko daude. Adibidez, bankuetan, burtsetan eta beste finantza-negozio batzuetan, eragiketak ordena egokian egin behar dira, eta horretarako denbora-sekuentzia zehatzak funtsezkoak dira.
Gure telefonoek, tabletek, autoek, GPS sistemak eta ordenagailuek ordu eta data ezarpen zehatzak behar dituzte. Nire ordenagailuko mahaigaineko erlojuak ordu egokia erakustea nahi dut. Oroigarriak nire tokiko egutegian une egokian agertzea nahi dut. Ordu egokiak cron eta systemd lanak une egokian exekutatzen direla ziurtatzen du.
Data eta ordua ere garrantzitsuak dira erregistratzeko, beraz, apur bat errazagoa da data eta orduaren araberako zenbait erregistro aurkitzea. Esate baterako, behin DevOps-en lan egin nuen (garai hartan ez zen horrela deitzen) eta Ipar Carolina estatuan posta elektronikoko sistema bat ezartzen ari nintzen. Egunean 20 milioi mezu elektroniko baino gehiago prozesatzen genituen. Posta elektronikoaren jarraipena zerbitzari batzuen bidez edo gertaeren sekuentzia zehatza zehaztea geografikoki sakabanatuta dauden ostalarien erregistro fitxategiak erabiliz, askoz errazagoa izan daiteke dagozkien ordenagailuak denboran sinkronizatzen badira.
Denbora bat - ordu asko
Linux ostalariek kontuan izan behar dute sistemaren ordua eta RTC ordua daudela. RTC (Real Time Clock) hardware erloju baten izen apur bat arraroa eta ez oso zehatza da.
Hardwarearen erlojua etengabe dabil ordenagailua itzalita dagoenean ere, sistemaren plakako bateria erabiliz. RTC-ren funtzio nagusia denbora zerbitzari baterako konexiorik erabilgarri ez dagoenean denbora gordetzea da. Internet bidez ordu-zerbitzari batera konektatzea ezinezkoa zen garaian, ordenagailu bakoitzak barne-erloju zehatza izan behar zuen. Sistema eragileek RTCra abiarazteko garaian sartu behar zuten eta erabiltzaileak eskuz ezarri behar zuen sistemaren ordua BIOS hardwarearen konfigurazio interfazea erabiliz, zuzena zela ziurtatzeko.
Hardware-erlojuak ez du ulertzen ordu-eremuen kontzeptua; RTC-k ordua bakarrik gordetzen du, ez ordu-zona edo UTC-tik (Koordinatutako Ordua, GMT edo Greenwich Mean Time izenez ere ezagutzen dena). RTC instalatu dezakezu artikulu honetan geroago azalduko dudan tresna bat erabiliz.
Sistemaren ordua OSak zure mahaigaineko GUI erlojuan bistaratzen duen ordua da, data komandoaren irteeran, erregistroen denbora-zigiluetan. Hau fitxategiak sortu, aldatzen eta irekitzen direnean ere aplikatzen da.
Orrialdean
Zer gertatzen da NTPrekin?
Mundu osoko ordenagailuek NTP (Network Time Protocol) erabiltzen dute beren ordua erreferentziako erloju estandarrekin sinkronizatzeko Interneten bidez, NTP zerbitzarien hierarkia bat erabiliz. Ordu-zerbitzari nagusiak 1. geruzan daude eta 0. geruzako hainbat ordu-zerbitzu nazionaletara zuzenean konektatuta daude satelite, irrati edo modem bidez telefono-lineen bidez. Layer 0 denbora-zerbitzuak erloju atomiko bat, erloju atomikoek transmititutako seinaleetara sintonizatuta dagoen irrati-hargailu bat edo GPS sateliteek transmititutako erloju-seinale zehatzak erabiltzen dituen GPS hargailua izan daitezke.
Erreferentziako zerbitzarien gehiengo zabalak hainbat mila NTP estrato 2 zerbitzari publiko ditu publikoarentzat. NTP zerbitzari bat behar duten ostalari asko dituzten erakunde eta erabiltzaile askok (ni barne) beren denbora zerbitzariak konfiguratzea aukeratzen dute, beraz, ostalari lokal bakarrak 2. edo 3. estratuetara sartzeko aukera ematen dute. Ondoren, sareko gainerako nodoak konfiguratzen dituzte tokikoa erabiltzeko. denbora zerbitzaria. Nire etxeko sarearen kasuan, hau 3. geruzako zerbitzaria da.
NTPren hainbat ezarpen
NTPren jatorrizko ezarpena ntpd da. Ondoren, bi berriagoak gehitu zitzaizkion, chronyd eta systemd-timesyncd. Hirurek ostalari lokaleko ordua NTP ordu-zerbitzari batekin sinkronizatzen dute. Systemd-timesyncd zerbitzua ez da chronyd bezain fidagarria, baina aski ona da helburu gehienetarako. RTC sinkronizatu gabe badago, sistemaren ordua pixkanaka doi dezake NTP zerbitzariarekin sinkronizatzeko, tokiko sistemaren ordua zertxobait aldatzen denean. Systemd-timesync zerbitzua ezin da denbora zerbitzari gisa erabili.
- Chrony-k denbora zerbitzari batekin sinkroniza dezake ntpd zerbitzu zaharra baino askoz azkarrago. Hau ona da denbora guztian funtzionatzen ez duten ordenagailu eramangarrietarako edo mahaigainetarako.
- Erlojuaren gorabeherak konpentsatu ditzake, hala nola ostalaria lo egiten denean edo lo moduan sartzen denean, edo erlojua aldatzen denean maiztasun-jauziaren ondorioz, karga baxuetan erlojuak moteltzen dituenean.
- Sare-konexio ezegonkorrarekin edo sare-pilaketarekin lotutako denbora arazoak konpontzen ditu.
- Sareko atzerapenak arautzen ditu.
- Hasierako denbora sinkronizatu ondoren, Chrony-k ez du inoiz erlojua gelditzen. Honek denbora tarte egonkorrak eta koherenteak eskaintzen ditu sistemaren zerbitzu eta aplikazio askorentzat.
- Chrony-k sareko konexiorik gabe ere funtziona dezake. Kasu honetan, tokiko ostalaria edo zerbitzaria eskuz egunera daiteke.
- Chrony-k NTP zerbitzari gisa jardun dezake.
Berriro ere, NTP Chrony edo systemd-timesyncd erabiliz Linux ostalari batean inplementa daitekeen protokoloa da.
NTP, Chrony eta systemd-timesyncd RPMak Fedora biltegi estandarretan daude eskuragarri. systemd-udev RPM nukleoaren gertaeren kudeatzailea da, lehenespenez Fedoran instalatuta dagoena, baina aukerakoa da.
Hirurak instalatu eta batetik bestera alda ditzakezu, baina honek aparteko buruko mina sortuko du. Beraz, hobe da ez egitea. Fedora, CentOS eta RHEL bertsio modernoak Chrony-ra eraman dira ezarpen lehenetsi gisa, eta systemd-timesyncd ere badute. Chrony-k ondo funtzionatzen duela iruditzen zait, NTP zerbitzua baino interfaze hobea eskaintzen du, askoz informazio eta kontrol gehiago eskaintzen du, sistema-administratzaileek zalantzarik gabe gozatuko dutena.
NTP zerbitzuak desgaitzea
Baliteke NTP zerbitzua dagoeneko martxan egotea zure ostalarian. Hala bada, desgaitu behar duzu beste zerbaitera aldatu aurretik. Chronyd exekutatzen nuen, beraz, hurrengo komandoak erabili nituen gelditzeko eta desgaitzeko. Exekutatu komando egokiak zure ostalarian exekutatzen ari zaren NTP daemonentzat:
[root@testvm1 ~]# systemctl disable chronyd ; systemctl stop chronyd
Removed /etc/systemd/system/multi-user.target.wants/chronyd.service.
[root@testvm1 ~]#
Egiaztatu zerbitzua geldituta eta desgaituta dagoela:
[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 ~]#
Abiarazi aurretik egoera egiaztatzea
Sistemaren erlojuaren sinkronizazio-egoerak NTP zerbitzua martxan dagoen ala ez zehaztea ahalbidetzen du. NTP oraindik hasi ez duzunez, timesync-status komandoak hau adieraziko du:
[root@testvm1 ~]# timedatectl timesync-status
Failed to query server: Could not activate remote peer.
Zuzeneko egoera-eskaerak informazio garrantzitsua eskaintzen du. Adibidez, argumentu edo aukerarik gabeko timedatectl komandoak egoera azpikomandoa lehenespenez exekutatzen du:
[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 ~]#
Honek zure ostalariaren tokiko ordua, UTC ordua eta RTC ordua emango dizu. Kasu honetan, sistemaren ordua Amerika / New_York (TZ) ordu-eremuan ezartzen da, RTC tokiko ordu-eremuan dagoen ordua ezartzen da eta NTP zerbitzua ez dago aktibo. RTC ordua sistemaren ordutik zertxobait desbideratzen hasi da. Hau normala da erlojuak sinkronizatu ez dituzten sistemetan. Ostalariaren desplazamenduaren zenbatekoa sistema azken sinkronizatu zenetik igaro den denboraren araberakoa da.
RTCrako tokiko ordua erabiltzeari buruzko abisu bat ere jaso dugu; hau ordu-zona aldaketei eta DST ezarpenei dagokie. Aldaketak egin behar direnean ordenagailua itzaltzen bada, RTC ez da aldatuko. Baina erloju osoan zehar exekutatzen diren zerbitzarientzat edo beste ostalarientzat, hau ez da batere arazorik. Gainera, NTP ordu-sinkronizazioa eskaintzen duen edozein zerbitzuk ostalariaren ordua egokituko du hasierako abiarazte-fasean, beraz, ordua berriro zuzena izango da abiarazi ondoren.
Ordu-eremua ezartzea
Normalean, ordu-zona zehazten duzu instalazio-prozeduran zehar eta ez duzu geroago aldatzeko zereginik. Hala ere, ordu-eremua aldatu behar duzun une batzuetan. Lagun dezaketen hainbat tresna daude. Linux-ek ordu-eremuaren fitxategiak erabiltzen ditu ostalari baten tokiko ordu-eremua zehazteko. Fitxategi hauek direktorioan daude /usr/share/zoneinfo. Lehenespenez, nire ordu-eremurako, sistemak hau agintzen du: /etc/localtime -> ../usr/share/zoneinfo/America/New_York. Baina ez duzu halako Γ±abardurak ezagutu behar ordu-eremua aldatzeko.
Gauza nagusia zure kokapenaren ordu-zona ofizialaren izena eta dagokion komandoa ezagutzea da. Demagun ordu-eremua Los Angelesera aldatu nahi duzula:
[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>
Orain ordu-eremua ezar dezakezu. Date komandoa erabili nuen aldaketak egiaztatzeko, baina timedatectl ere erabil dezakezu:
[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 ~]#
Orain zure ostalariaren ordu-eremua tokiko ordura alda dezakezu.
systemd-timesyncd
Systemd timesync daemon-ek NTP inplementazioa eskaintzen du, sistemaren testuinguruan kudeatzeko erraza dena. Lehenespenez instalatuta dago Fedora eta Ubuntun. Hala ere, lehenespenez bakarrik hasten da Ubuntun. Ez nago ziur beste banaketaz. Zuk zeuk egiaztatu dezakezu:
[root@testvm1 ~]# systemctl status systemd-timesyncd
systemd-timesyncd konfiguratzen
systemd-timesyncd-ren konfigurazio fitxategia da /etc/systemd/timesyncd.conf. Fitxategi sinple bat da NTP eta chronyd zerbitzu zaharrak baino aukera gutxiago gaituta dituena. Hona hemen fitxategi honen edukia (aldaketa gehiagorik gabe) nire Fedora VM-n:
# 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
Daukan atal bakarra, iruzkinez gain, [Denbora] da. Beste lerro guztiak iruzkintzen dira. Hauek dira balio lehenetsiak eta ez dira aldatu behar (arrazoirik ez baduzu behintzat). Ez baduzu NTP ordu-zerbitzaririk definitu NTP= lerroan, Fedorak lehenetsitako Fedora denbora-zerbitzari bat izango du. Normalean nire denbora zerbitzaria gehitzen dut:
NTP=myntpserver
Timesync martxan
Systemd-timesyncd abiarazi eta aktibo egin dezakezu honela:
[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 ~]#
Hardware-erlojua ezartzea
Hona hemen timesyncd exekutatu ondoren egoera nolakoa den:
[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
Hasieran, RTC eta tokiko orduaren (EDT) arteko aldea segundo bat baino txikiagoa da, eta desadostasuna beste pare bat segundo handitzen da hurrengo egunetan. RTCn ordu-eremuen kontzepturik ez dagoenez, timedatectl komandoak konparazio bat egin behar du ordu-eremu zuzena zehazteko. RTC ordua tokiko orduarekin zehazki bat ez badator, orduan ere ez dator bat tokiko ordu-eremuarekin.
Informazio gehiago bila, systemd-timesync-en egoera egiaztatu nuen eta hau aurkitu nuen:
[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]#
Kontuan izan sistemaren ordua ez dela ezarri edo berrezarri dela dioen erregistro-mezua. Timesync zerbitzuak denbora-zigiluaren arabera ezartzen du sistemaren ordua. Denbora-zigiluak timesync deabruak mantentzen ditu eta sinkronizazio arrakastatsu guztietan sortzen dira.
timedatectl komandoak ez du hardware-erlojuaren balioa sistema-erlojutik hartzeko modurik. Komando-lerrokoan sartutako baliotik soilik ezarri ditzake ordua eta data. RTC sistemaren orduaren balio berdinean ezar dezakezu hwclock komandoa erabiliz:
[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 aukerak hardwareko erlojuari tokiko ordua erakusteko esaten dio, ez UTC.
Zergatik behar duzu RTC?
NTP-ren edozein ezarpenek sistemaren erlojua ezarriko dute abiarazteko orduan. Eta zergatik orduan RTC? Hau ez da guztiz egia: denbora zerbitzariarekin sareko konexioa baduzu bakarrik gertatuko da. Hala ere, sistema askok ez dute beti sareko konexiorako sarbidea, beraz, hardware-erlojua erabilgarria da Linux-ek sistemaren ordua ezartzeko. Hau denbora eskuz ezartzea baino hobea da, nahiz eta denbora errealetik aldendu daitekeen.
Ondorioa
Artikulu honek data, ordua eta ordu-eremuak manipulatzeko tresna batzuk berrikusi ditu. systemd-timesyncd tresnak NTP bezero bat eskaintzen du, tokiko ostalariaren ordua NTP zerbitzari batekin sinkroniza dezakeena. Hala ere, systemd-timesyncd-ek ez du zerbitzari-zerbitzurik eskaintzen, beraz, zure sarean NTP zerbitzari bat behar baduzu, beste zerbait erabili behar duzu, Chrony adibidez, zerbitzari gisa jarduteko.
Nahiago dut nire sareko edozein zerbitzutarako inplementazio bakarra izatea, beraz Chrony erabiltzen dut. Tokiko NTP zerbitzaririk behar ez baduzu edo Chrony zerbitzari gisa erabiltzea eta systemd-timesyncd SNTP bezero gisa erabiltzea ez bazaizu axola. Azken finean, ez dago Chrony-ren ezaugarri osagarriak bezero gisa erabili beharrik systemd-timesyncd-en funtzionaltasunarekin pozik bazaude.
Beste ohar bat: ez duzu NTP inplementatzeko systemd tresnak erabili behar. ntpd, Chrony edo beste NTP inplementazio baten bertsio zaharrago bat erabil dezakezu. Azken finean, systemd zerbitzu ugariz osatuta dago; horietako asko aukerakoak dira, beraz, itzali eta beste zerbait erabil dezakezu. Hau ez da munstro monolitiko handi bat. Agian ez zaizu gustatuko systemd edo haren zatiak, baina erabaki informatua hartu beharko zenuke.
Systemd-en NTP inplementatzea gustatzen zait, baina Chrony nahiago dut nire beharretara hobeto egokitzen delako. Linux da, haurra -)
Publizitatearen Eskubideei buruz
VDSina eskaintzen du
Iturria: www.habr.com