Većina ljudi prati vrijeme. Ustajemo na vrijeme kako bismo dovršili svoje jutarnje rituale i otišli na posao, napravili pauzu za ručak, ispoštovali projektne rokove, proslavili rođendane i praznike, ukrcali se na avion i tako dalje.
Štoviše: neki od nas su opsjednuti vremenom. Moj sat se napaja solarnom energijom i dobiva točno vrijeme od Nacionalnog instituta za standarde i tehnologiju (
Uređaji također prate vrijeme
Mnogo je razloga zašto naši uređaji i računala trebaju točno vrijeme. Na primjer, u bankarstvu, burzama i drugim financijskim poslovima, transakcije se moraju provoditi pravilnim redoslijedom, a točni vremenski slijedovi su ključni za to.
Naši telefoni, tableti, automobili, GPS sustavi i računala zahtijevaju točne postavke vremena i datuma. Želim da sat na radnoj površini mog računala pokazuje točno vrijeme. Želim da se podsjetnici pojave na mom lokalnom kalendaru u pravo vrijeme. Točno vrijeme također osigurava da se cron i systemd poslovi izvode u točno vrijeme.
Datum i vrijeme također su važni za bilježenje, tako da je malo lakše pronaći određene zapise na temelju datuma i vremena. Na primjer, jednom sam radio u DevOps-u (tada se nije tako zvao) i postavljao sustav e-pošte u državi Sjeverna Karolina. Obrađivali smo više od 20 milijuna e-pošte dnevno. Praćenje e-pošte kroz niz poslužitelja ili određivanje točnog slijeda događaja korištenjem datoteka dnevnika na geografski raspršenim hostovima može biti mnogo lakše ako su odgovarajuća računala sinkronizirana na vrijeme.
Jednom - mnogo sati
Linux hostovi moraju uzeti u obzir da postoji sistemsko vrijeme i RTC vrijeme. RTC (Real Time Clock) pomalo je čudan i ne baš precizan naziv za hardverski sat.
Hardverski sat neprekidno radi čak i kada je računalo isključeno, koristeći bateriju na matičnoj ploči sustava. Glavna funkcija RTC-a je pohranjivanje vremena kada veza s vremenskim poslužiteljem nije dostupna. U danima kada je bilo nemoguće spojiti se na vremenski poslužitelj putem Interneta, svako je računalo moralo imati točan interni sat. Operativni sustavi morali su pristupiti RTC-u prilikom podizanja sustava, a korisnik je morao ručno postaviti sistemsko vrijeme pomoću sučelja za konfiguraciju hardvera BIOS-a kako bi se uvjerio da je ispravno.
Hardverski satovi ne razumiju koncept vremenskih zona; RTC pohranjuje samo vrijeme, ne vremensku zonu ili pomak od UTC-a (Univerzalno koordinirano vrijeme, također poznato kao GMT ili srednje vrijeme po Greenwichu). RTC možete instalirati pomoću alata koji ću obraditi kasnije u ovom članku.
Vrijeme sustava je vrijeme koje OS prikazuje na GUI satu na vašoj radnoj površini, u izlazu naredbe datuma, u vremenskim oznakama zapisa. Ovo se također odnosi na vrijeme kada se datoteke stvaraju, mijenjaju i otvaraju.
Na stranici
Što je s NTP-om?
Računala u cijelom svijetu koriste NTP (Network Time Protocol) za sinkronizaciju vremena sa standardnim referentnim satovima putem Interneta koristeći hijerarhiju NTP poslužitelja. Glavni vremenski poslužitelji su na sloju 1 i izravno su povezani s raznim nacionalnim vremenskim servisima na sloju 0 putem satelita, radija ili čak modema preko telefonskih linija. Vremenske usluge sloja 0 mogu biti atomski sat, radio prijemnik koji je podešen na signale koje emitiraju atomski satovi ili GPS prijamnik koji koristi vrlo precizne signale sata koje emitiraju GPS sateliti.
Velika većina referentnih poslužitelja ima nekoliko tisuća javnih NTP poslužitelja sloja 2 otvorenih za javnost. Mnoge organizacije i korisnici (uključujući i mene) s puno računala kojima je potreban NTP poslužitelj odabiru postavljanje vlastitih vremenskih poslužitelja tako da samo jedan lokalni poslužitelj pristupa sloju 2 ili 3. Zatim konfiguriraju preostale čvorove na mreži da koriste lokalne poslužitelj vremena . U slučaju moje kućne mreže, ovo je poslužitelj sloja 3.
Razne implementacije NTP-a
Izvorna implementacija NTP-a je ntpd. Zatim su mu se pridružila dva novija, chronyd i systemd-timesyncd. Sva tri sinkroniziraju lokalno vrijeme hosta s NTP poslužiteljem vremena. Usluga systemd-timesyncd nije tako pouzdana kao chronyd, ali je dovoljno dobra za većinu namjena. Ako RTC nije sinkroniziran, može postupno prilagoditi sistemsko vrijeme za sinkronizaciju s NTP poslužiteljem kada vrijeme lokalnog sustava malo odstupa. Usluga systemd-timesync ne može se koristiti kao vremenski poslužitelj.
- Chrony se može sinkronizirati s vremenskim poslužiteljem mnogo brže od stare usluge ntpd. Ovo je dobro za prijenosna ili stolna računala koja ne rade stalno.
- Može kompenzirati fluktuacije sata, primjerice kada glavno računalo ode u stanje mirovanja ili uđe u način mirovanja ili kada se sat promijeni zbog skakanja frekvencije, što usporava satove pri niskim opterećenjima.
- Rješava vremenske probleme povezane s nestabilnom mrežnom vezom ili zagušenjem mreže.
- Regulira mrežna kašnjenja.
- Nakon početne sinkronizacije vremena, Chrony nikad ne zaustavlja sat. To osigurava stabilne i dosljedne vremenske odsječke za mnoge sistemske usluge i aplikacije.
- Chrony može raditi čak i bez mrežne veze. U tom slučaju, lokalni host ili poslužitelj mogu se ažurirati ručno.
- Chrony može djelovati kao NTP poslužitelj.
Još jednom, NTP je protokol koji se može implementirati na Linux host koristeći Chrony ili systemd-timesyncd.
RPM-ovi NTP, Chrony i systemd-timesyncd dostupni su u standardnim Fedora spremištima. Systemd-udev RPM je kernel event manager koji je instaliran prema zadanim postavkama na Fedori, ali nije obavezan.
Možete instalirati sva tri i prebacivati se između njih, ali to će vam stvoriti dodatnu glavobolju. Tako da je bolje nemoj. Moderna izdanja Fedora, CentOS i RHEL prešla su na Chrony kao zadanu implementaciju, a također imaju systemd-timesyncd. Smatram da Chrony dobro radi, pruža bolje sučelje od NTP usluge, pruža mnogo više informacija i kontrole, u čemu će sigurno uživati administratori sustava.
Onemogućavanje NTP usluga
NTP usluga možda već radi na vašem hostu. Ako je tako, trebate ga onemogućiti prije prebacivanja na nešto drugo. Imao sam pokrenut chronyd pa sam upotrijebio sljedeće naredbe da ga zaustavim i onemogućim. Pokrenite odgovarajuće naredbe za bilo koji NTP demon koji izvodite na svom hostu:
[root@testvm1 ~]# systemctl disable chronyd ; systemctl stop chronyd
Removed /etc/systemd/system/multi-user.target.wants/chronyd.service.
[root@testvm1 ~]#
Provjerite je li usluga zaustavljena i onemogućena:
[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 ~]#
Provjera statusa prije pokretanja
Status sinkronizacije sata sustava omogućuje vam da odredite radi li NTP usluga. Budući da još niste pokrenuli NTP, naredba timesync-status će nagovijestiti ovo:
[root@testvm1 ~]# timedatectl timesync-status
Failed to query server: Could not activate remote peer.
Izravan zahtjev za status pruža važne informacije. Na primjer, naredba timedatectl bez argumenata ili opcija izvršava podnaredbu status prema zadanim postavkama:
[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 ~]#
Ovo će vam dati lokalno vrijeme za vaš host, UTC vrijeme i RTC vrijeme. U ovom slučaju, vrijeme sustava je postavljeno na vremensku zonu Amerike / New_Yorka (TZ), RTC je postavljen na vrijeme u lokalnoj vremenskoj zoni, a NTP usluga nije aktivna. RTC vrijeme počelo je lagano odstupati od sistemskog vremena. To je normalno za sustave čiji satovi nisu sinkronizirani. Iznos pomaka na hostu ovisi o vremenu koje je prošlo od zadnje sinkronizacije sustava.
Također smo primili upozorenje o korištenju lokalnog vremena za RTC - ovo se odnosi na promjene vremenske zone i postavke DST-a. Ako je računalo isključeno kada je potrebno napraviti promjene, RTC se neće promijeniti. Ali za poslužitelje ili druge hostove koji rade XNUMX sata na dan, to uopće nije problem. Osim toga, bilo koja usluga koja pruža NTP sinkronizaciju vremena prilagodit će vrijeme glavnog računala tijekom početne faze pokretanja, tako da će vrijeme ponovno biti točno nakon završetka pokretanja.
Postavljanje vremenske zone
Obično odredite vremensku zonu tijekom postupka instalacije i nemate zadatak mijenjati je kasnije. Međutim, ponekad morate promijeniti vremensku zonu. Postoji nekoliko alata koji mogu pomoći. Linux koristi datoteke vremenske zone za određivanje lokalne vremenske zone hosta. Ove datoteke su u direktoriju /usr/share/zoneinfo. Prema zadanim postavkama, za moju vremensku zonu, sustav propisuje ovo: /etc/localtime -> ../usr/share/zoneinfo/America/New_York. Ali ne morate znati takve suptilnosti da biste promijenili vremensku zonu.
Najvažnije je znati službeni naziv vremenske zone za svoju lokaciju i odgovarajuću naredbu. Recimo da želite promijeniti vremensku zonu u Los Angeles:
[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>
Sada možete postaviti vremensku zonu. Koristio sam naredbu date za provjeru promjena, ali također možete koristiti timedatectl:
[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 ~]#
Sada možete vratiti vremensku zonu svog domaćina na lokalno vrijeme.
systemd-timesyncd
Systemd timesync demon pruža NTP implementaciju kojom je lako upravljati u kontekstu systemd. Instaliran je prema zadanim postavkama na sustavima Fedora i Ubuntu. Međutim, prema zadanim postavkama pokreće se samo na Ubuntuu. Za druge distribucije nisam siguran. Možete provjeriti sami:
[root@testvm1 ~]# systemctl status systemd-timesyncd
Konfiguriranje systemd-timesyncd
Konfiguracijska datoteka za systemd-timesyncd je /etc/systemd/timesyncd.conf. Ovo je jednostavna datoteka s manje omogućenih opcija nego stari NTP i chronyd servisi. Evo sadržaja ove datoteke (bez daljnjih izmjena) na mom Fedora VM-u:
# 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
Jedini odjeljak koji sadrži, osim komentara, je [Vrijeme]. Svi ostali reci su komentirani. Ovo su zadane vrijednosti i ne smiju se mijenjati (osim ako za to nemate razloga). Ako nemate definiran NTP vremenski poslužitelj u retku NTP=, Fedora postavlja zamjenski Fedora vremenski poslužitelj. Obično dodajem svoj vremenski poslužitelj:
NTP=myntpserver
Sinkronizacija vremena rada
Možete pokrenuti i aktivirati systemd-timesyncd ovako:
[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 ~]#
Postavljanje hardverskog sata
Evo kako situacija izgleda nakon pokretanja timesyncd-a:
[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
U početku je razlika između RTC i lokalnog vremena (EDT) manja od jedne sekunde, a tijekom sljedećih nekoliko dana razlika se povećava za još nekoliko sekundi. Budući da u RTC-u ne postoji koncept vremenskih zona, naredba timedatectl mora izvršiti usporedbu kako bi odredila točnu vremensku zonu. Ako RTC vrijeme ne odgovara točno lokalnom vremenu, onda ne odgovara ni lokalnoj vremenskoj zoni.
U potrazi za više informacija, provjerio sam status systemd-timesync i pronašao ovo:
[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]#
Obratite pozornost na poruku dnevnika koja kaže da sistemsko vrijeme nije postavljeno ili je poništeno. Usluga Timesync postavlja sistemsko vrijeme na temelju vremenske oznake. Vremenske oznake održava demon za vremensku sinkronizaciju i stvaraju se pri svakoj uspješnoj sinkronizaciji.
Naredba timedatectl ne može preuzeti vrijednost hardverskog sata od sistemskog sata. Može postaviti samo vrijeme i datum iz vrijednosti unesene u naredbeni redak. RTC možete postaviti na istu vrijednost kao sistemsko vrijeme pomoću naredbe hwclock:
[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
Opcija --localtime govori hardverskom satu da prikazuje lokalno vrijeme, a ne UTC.
Zašto vam uopće treba RTC?
Svaka implementacija NTP-a postavit će sistemski sat u vrijeme pokretanja. A zašto onda RTC? To nije sasvim točno: to će se dogoditi samo ako imate mrežnu vezu s vremenskim poslužiteljem. Međutim, mnogi sustavi nemaju uvijek pristup mrežnoj vezi, tako da je hardverski sat koristan za Linux za postavljanje sistemskog vremena. Ovo je bolje od ručnog postavljanja vremena, iako ono može odstupati od stvarnog vremena.
Zaključak
Ovaj članak je pregledao neke alate za manipuliranje datumom, vremenom i vremenskim zonama. Alat systemd-timesyncd pruža NTP klijenta koji može sinkronizirati vrijeme na lokalnom hostu s NTP poslužiteljem. Međutim, systemd-timesyncd ne pruža uslugu poslužitelja, pa ako vam je potreban NTP poslužitelj na vašoj mreži, morate koristiti nešto drugo, kao što je Chrony, da djeluje kao poslužitelj.
Više volim imati jednu implementaciju za bilo koju uslugu na svojoj mreži, pa koristim Chrony. Ako vam ne treba lokalni NTP poslužitelj ili ako vam ne smeta koristiti Chrony kao poslužitelj i systemd-timesyncd kao SNTP klijent. Uostalom, nema potrebe koristiti dodatne značajke Chronya kao klijenta ako ste zadovoljni funkcionalnošću systemd-timesyncd.
Još jedna napomena: ne morate koristiti alate systemd za implementaciju NTP-a. Možete koristiti stariju verziju ntpd-a, Chrony-ja ili neku drugu implementaciju NTP-a. Uostalom, systemd se sastoji od velikog broja usluga; mnogi od njih su izborni, pa ih možete isključiti i umjesto njih koristiti nešto drugo. Ovo nije veliko monolitno čudovište. Možda vam se ne sviđa systemd ili njegovi dijelovi, ali trebali biste donijeti informiranu odluku.
Sviđa mi se systemd-ova implementacija NTP-a, ali više volim Chrony jer više odgovara mojim potrebama. To je Linux, dušo -)
O pravima oglašavanja
VDSina nudi
Izvor: www.habr.com