Useimmat ihmiset seuraavat aikaa. Nousemme ajoissa suorittaaksemme aamurituaalimme ja menemme töihin, pidämme lounastauon, noudatamme projektin määräaikoja, juhlimme syntymäpäiviä ja lomapäiviä, nousemme lentokoneeseen ja niin edelleen.
Lisäksi: jotkut meistä ovat pakkomielle ajasta. Kelloni toimii aurinkoenergialla ja saa tarkan ajan National Institute of Standards and Technologylta (
Laitteet seuraavat myös aikaa
On monia syitä, miksi laitteemme ja tietokoneemme tarvitsevat tarkan ajan. Esimerkiksi pankkitoiminnassa, osakemarkkinoilla ja muissa rahoitusalan liiketoimissa liiketoimet on suoritettava oikeassa järjestyksessä, ja tarkat aikajaksot ovat tässä kriittisiä.
Puhelimemme, tablettimme, automme, GPS-järjestelmämme ja tietokoneemme edellyttävät tarkat aika- ja päivämääräasetukset. Haluan, että tietokoneeni työpöydällä oleva kello näyttää oikeaa aikaa. Haluan, että muistutukset näkyvät paikallisessa kalenterissani oikeaan aikaan. Oikea aika varmistaa myös, että cron- ja systemd-työt suoritetaan oikeaan aikaan.
Päivämäärä ja aika ovat myös tärkeitä kirjaamisen kannalta, joten tiettyjen lokien löytäminen päivämäärän ja kellonajan perusteella on hieman helpompaa. Esimerkiksi työskentelin kerran DevOpsissa (sitä ei tuolloin kutsuttu) ja olin perustamassa sähköpostijärjestelmää Pohjois-Carolinan osavaltioon. Käsittelimme yli 20 miljoonaa sähköpostia päivässä. Sähköpostin seuraaminen useiden palvelimien kautta tai tapahtumien tarkan järjestyksen määrittäminen lokitiedostojen avulla maantieteellisesti hajallaan olevilla isännillä voi olla paljon helpompaa, jos vastaavat tietokoneet synkronoidaan ajoissa.
Kerran - monta tuntia
Linux-isäntien on otettava huomioon, että on olemassa järjestelmäaika ja RTC-aika. RTC (Real Time Clock) on hieman outo ja ei kovin tarkka nimi laitteistokellolle.
Laitteistokello toimii jatkuvasti, vaikka tietokone olisi sammutettu, järjestelmän emolevyn akun avulla. RTC:n päätehtävä on tallentaa aikaa, kun yhteyttä aikapalvelimeen ei ole saatavilla. Niinä päivinä, jolloin Internetin kautta oli mahdotonta muodostaa yhteyttä aikapalvelimeen, jokaisessa tietokoneessa oli oltava tarkka sisäinen kello. Käyttöjärjestelmien oli päästävä RTC:hen käynnistyksen yhteydessä, ja käyttäjän oli asetettava järjestelmän aika manuaalisesti BIOS-laitteiston konfigurointirajapinnan avulla varmistaakseen, että se oli oikein.
Laitteistokellot eivät ymmärrä aikavyöhykkeiden käsitettä; RTC tallentaa vain ajan, ei aikavyöhykettä tai poikkeamaa UTC:stä (Coordinated Universal Time, joka tunnetaan myös nimellä GMT tai Greenwichin aika). Voit asentaa RTC:n työkalulla, jota käsittelen myöhemmin tässä artikkelissa.
Järjestelmän aika on aika, jonka käyttöjärjestelmä näyttää työpöydän GUI-kellossa, päivämääräkomennon tulosteessa, lokien aikaleimoissa. Tämä koskee myös tiedostojen luomista, muokkaamista ja avaamista.
Sivulla
Mitä NTP:lle kuuluu?
Tietokoneet kaikkialla maailmassa käyttävät NTP-protokollaa (Network Time Protocol) synkronoidakseen aikansa tavallisten viitekellojen kanssa Internetissä käyttämällä NTP-palvelimien hierarkiaa. Pääaikapalvelimet ovat kerroksessa 1 ja ne ovat suoraan yhteydessä eri kansallisiin aikapalveluihin kerroksessa 0 satelliitin, radion tai jopa puhelinlinjojen kautta modeemien kautta. Layer 0 -aikapalvelut voivat olla atomikello, radiovastaanotin, joka on viritetty atomikellojen lähettämiin signaaleihin, tai GPS-vastaanotin, joka käyttää erittäin tarkkoja GPS-satelliittien lähettämiä kellosignaaleja.
Suurimmalla osalla referenssipalvelimista on useita tuhansia julkisia NTP stratum 2 -palvelimia, jotka ovat avoinna yleisölle. Monet organisaatiot ja käyttäjät (mukaan lukien minä), joilla on paljon isäntiä ja jotka tarvitsevat NTP-palvelimen, päättävät perustaa omat aikapalvelimensa, jotta vain yksi paikallinen isäntä pääsee osuuteen 2 tai 3. Sitten he määrittävät verkon loput solmut käyttämään paikallista aikapalvelin. Kotiverkon tapauksessa tämä on kerroksen 3 palvelin.
Erilaisia NTP-toteutuksia
NTP:n alkuperäinen toteutus on ntpd. Sitten siihen liittyi kaksi uudempaa, chronyd ja systemd-timesyncd. Kaikki kolme synkronoivat paikallisen isäntäajan NTP-aikapalvelimen kanssa. Systemd-timesyncd-palvelu ei ole yhtä luotettava kuin chronyd, mutta se on riittävän hyvä useimpiin tarkoituksiin. Jos RTC ei ole synkronoitu, se voi vähitellen säätää järjestelmän aikaa synkronoitumaan NTP-palvelimen kanssa, kun paikallinen järjestelmäaika poikkeaa hieman. Systemd-timesync-palvelua ei voi käyttää aikapalvelimena.
- Chrony voi synkronoida aikapalvelimen kanssa paljon nopeammin kuin vanha ntpd-palvelu. Tämä sopii kannettaville tietokoneille tai pöytätietokoneille, jotka eivät toimi koko ajan.
- Se voi kompensoida kellonvaihtelut, kuten kun isäntä menee lepotilaan tai siirtyy lepotilaan, tai kun kello muuttuu taajuushyppelyn vuoksi, mikä hidastaa kelloja alhaisilla kuormilla.
- Se ratkaisee epävakaaseen verkkoyhteyteen tai verkon ruuhkautumiseen liittyvät aikaongelmat.
- Se säätelee verkon viiveitä.
- Ensimmäisen ajan synkronoinnin jälkeen Chrony ei koskaan pysäytä kelloa. Tämä tarjoaa vakaat ja yhdenmukaiset aikavälit monille järjestelmäpalveluille ja sovelluksille.
- Chrony voi toimia myös ilman verkkoyhteyttä. Tässä tapauksessa paikallinen isäntä tai palvelin voidaan päivittää manuaalisesti.
- Chrony voi toimia NTP-palvelimena.
Jälleen kerran, NTP on protokolla, joka voidaan toteuttaa Linux-isäntäkoneella Chronyn tai systemd-timesyncdin avulla.
NTP-, Chrony- ja systemd-timesyncd RPM:t ovat saatavilla tavallisissa Fedoran arkistoissa. systemd-udev RPM on ytimen tapahtumien hallinta, joka asennetaan oletuksena Fedoraan, mutta se on valinnainen.
Voit asentaa kaikki kolme ja vaihtaa niiden välillä, mutta tämä aiheuttaa ylimääräistä päänsärkyä. Joten on parempi olla tekemättä. Fedoran, CentOS:n ja RHEL:n nykyaikaiset julkaisut ovat siirtyneet Chronyyn oletustoteutukseksi, ja niissä on myös systemd-timesyncd. Mielestäni Chrony toimii hyvin, tarjoaa paremman käyttöliittymän kuin NTP-palvelu, tarjoaa paljon enemmän tietoa ja hallintaa, mistä järjestelmänvalvojat varmasti nauttivat.
NTP-palvelujen poistaminen käytöstä
NTP-palvelu saattaa olla jo käynnissä isännässäsi. Jos näin on, sinun on poistettava se käytöstä ennen kuin vaihdat johonkin muuhun. Chronyd oli käynnissä, joten käytin seuraavia komentoja sen pysäyttämiseen ja poistamiseen. Suorita asianmukaiset komennot mille tahansa NTP-daemonille, jota käytät isännässäsi:
[root@testvm1 ~]# systemctl disable chronyd ; systemctl stop chronyd
Removed /etc/systemd/system/multi-user.target.wants/chronyd.service.
[root@testvm1 ~]#
Tarkista, että palvelu on pysäytetty ja poistettu käytöstä:
[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 ~]#
Tilatarkistus ennen käynnistystä
Järjestelmän kellon synkronointitilan avulla voit määrittää, onko NTP-palvelu käynnissä. Koska et ole vielä käynnistänyt NTP:tä, timeync-status-komento vihjaa tähän:
[root@testvm1 ~]# timedatectl timesync-status
Failed to query server: Could not activate remote peer.
Suora tilapyyntö antaa tärkeitä tietoja. Esimerkiksi timedatectl-komento ilman argumenttia tai vaihtoehtoja suorittaa status-alikomennon oletusarvoisesti:
[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 ~]#
Tämä antaa sinulle isännän paikallisen ajan, UTC-ajan ja RTC-ajan. Tässä tapauksessa järjestelmän aika asetetaan Amerikan / New_Yorkin (TZ) aikavyöhykkeelle, RTC on asetettu paikallisen aikavyöhykkeen kellonaikaan, eikä NTP-palvelu ole aktiivinen. RTC-aika on alkanut hieman poiketa järjestelmäajasta. Tämä on normaalia järjestelmissä, joiden kelloja ei ole synkronoitu. Isännän siirtymän määrä riippuu ajasta, joka on kulunut järjestelmän viimeisestä synkronoinnista.
Saimme myös varoituksen paikallisen ajan käytöstä RTC:ssä - tämä koskee aikavyöhykemuutoksia ja kesäajan asetuksia. Jos tietokone sammutetaan, kun muutoksia on tehtävä, RTC ei muutu. Mutta palvelimille tai muille kellon ympäri toimiville koneille tämä ei ole ongelma ollenkaan. Lisäksi mikä tahansa palvelu, joka tarjoaa NTP-ajan synkronoinnin, säätää isännän aikaa alkukäynnistysvaiheessa, joten aika on jälleen oikea käynnistyksen jälkeen.
Aikavyöhykkeen asettaminen
Yleensä määrität aikavyöhykkeen asennuksen aikana, eikä sinun tarvitse muuttaa sitä myöhemmin. Joskus aikavyöhykettä on kuitenkin vaihdettava. On olemassa useita työkaluja, jotka voivat auttaa. Linux käyttää aikavyöhyketiedostoja määrittääkseen isännän paikallisen aikavyöhykkeen. Nämä tiedostot ovat hakemistossa /usr/share/zoneinfo. Oletuksena aikavyöhykkeelleni järjestelmä määrää tämän: /etc/localtime -> ../usr/share/zoneinfo/America/New_York. Mutta sinun ei tarvitse tietää tällaisia hienouksia muuttaaksesi aikavyöhykettä.
Tärkeintä on tietää sijaintisi virallinen aikavyöhykkeen nimi ja vastaava komento. Oletetaan, että haluat muuttaa aikavyöhykkeeksi 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>
Nyt voit asettaa aikavyöhykkeen. Käytin päivämäärä-komentoa muutosten tarkistamiseen, mutta voit myös käyttää timedatectl-komentoa:
[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 ~]#
Nyt voit vaihtaa isäntäsi aikavyöhykkeen takaisin paikalliseen aikaan.
systemd-timesyncd
Systemd timeync -daemon tarjoaa NTP-toteutuksen, jota on helppo hallita systemd-kontekstissa. Se on oletuksena asennettu Fedoraan ja Ubuntuun. Se käynnistyy kuitenkin oletuksena vain Ubuntussa. En ole varma muista jakeluista. Voit tarkistaa itse:
[root@testvm1 ~]# systemctl status systemd-timesyncd
Määritetään systemd-timesyncd
Systemd-timesyncd-määritystiedosto on /etc/systemd/timesyncd.conf. Tämä on yksinkertainen tiedosto, jossa on vähemmän vaihtoehtoja käytössä kuin vanhat NTP- ja chronyd-palvelut. Tässä on tämän tiedoston sisältö (ilman muita muutoksia) Fedora VM:ssäni:
# 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
Ainoa osio, joka siinä on kommenttien lisäksi, on [Aika]. Kaikki muut rivit on kommentoitu. Nämä ovat oletusarvoja, eikä niitä tule muuttaa (ellei sinulla ole syytä). Jos sinulla ei ole NTP=-rivillä määritettyä NTP-aikapalvelinta, Fedora käyttää oletuksena Fedoran vara-aikapalvelinta. Lisään yleensä aikapalvelimeni:
NTP=myntpserver
Ajansynkronointi käynnissä
Voit käynnistää ja aktivoida systemd-timesyncd:n seuraavasti:
[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 ~]#
Laitteistokellon asettaminen
Tältä tilanne näyttää timesyncd:n suorittamisen jälkeen:
[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
Aluksi ero RTC:n ja paikallisen ajan (EDT) välillä on alle sekunti, ja ero kasvaa vielä pari sekuntia seuraavien päivien aikana. Koska RTC:ssä ei ole aikavyöhykkeiden käsitettä, timedatectl-komennon on suoritettava vertailu oikean aikavyöhykkeen määrittämiseksi. Jos RTC-aika ei täsmälleen vastaa paikallista aikaa, se ei myöskään vastaa paikallista aikavyöhykettä.
Etsin lisätietoja, tarkistin systemd-timesyncin tilan ja löysin tämän:
[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]#
Huomaa lokiviesti, jonka mukaan järjestelmän aikaa ei ole asetettu tai se on nollattu. Timesync-palvelu asettaa järjestelmän ajan aikaleiman perusteella. Timesync-daemon ylläpitää aikaleimoja, ja ne luodaan jokaisen onnistuneen synkronoinnin yhteydessä.
Timedatectl-komennolla ei ole mitään keinoa ottaa laitteiston kellon arvoa järjestelmän kellosta. Se voi asettaa vain ajan ja päivämäärän komentoriville syötetystä arvosta. Voit asettaa RTC:n samaan arvoon kuin järjestelmän aika käyttämällä hwclock-komentoa:
[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
Vaihtoehto --localtime käskee laitteiston kellon näyttämään paikallista aikaa, ei UTC-aikaa.
Miksi ylipäätään tarvitset RTC:tä?
Mikä tahansa NTP:n toteutus asettaa järjestelmän kellon käynnistyshetkellä. Ja miksi sitten RTC? Tämä ei ole täysin totta: tämä tapahtuu vain, jos sinulla on verkkoyhteys aikapalvelimeen. Monilla järjestelmillä ei kuitenkaan aina ole pääsyä verkkoon, joten laitteistokello on hyödyllinen Linuxille järjestelmän ajan asettamiseen. Tämä on parempi kuin ajan asettaminen manuaalisesti, vaikka se saattaa poiketa reaaliajasta.
Johtopäätös
Tässä artikkelissa on tarkasteltu joitain työkaluja päivämäärän, ajan ja aikavyöhykkeiden muokkaamiseen. Systemd-timesyncd-työkalu tarjoaa NTP-asiakkaan, joka voi synkronoida paikallisen isäntälaitteen ajan NTP-palvelimen kanssa. Systemd-timesyncd ei kuitenkaan tarjoa palvelinpalvelua, joten jos tarvitset NTP-palvelimen verkkoosi, sinun on käytettävä jotain muuta, kuten Chrony-palvelinta, toimimaan palvelimena.
Pidän parempana yhden toteutuksen jokaiselle verkkoni palvelulle, joten käytän Chronyä. Jos et tarvitse paikallista NTP-palvelinta tai jos et halua käyttää Chronya palvelimena ja systemd-timesyncd:tä SNTP-asiakkaana. Loppujen lopuksi Chronyn lisäominaisuuksia ei tarvitse käyttää asiakkaana, jos olet tyytyväinen systemd-timesyncd:n toimivuuteen.
Toinen huomautus: sinun ei tarvitse käyttää systemd-työkaluja NTP:n toteuttamiseen. Voit käyttää ntpd:n, Chronyn tai muun NTP-toteutuksen vanhempaa versiota. Loppujen lopuksi systemd koostuu suuresta määrästä palveluita; monet niistä ovat valinnaisia, joten voit sammuttaa ne ja käyttää jotain muuta tilalle. Tämä ei ole valtava monoliittinen hirviö. Et ehkä pidä järjestelmästä tai sen osista, mutta sinun tulee tehdä tietoinen päätös.
Pidän systemdin NTP:n toteutuksesta, mutta pidän enemmän Chronysta, koska se sopii tarpeisiini paremmin. Se on Linux, kulta -)
Mainonnan oikeuksista
VDSina tarjoaa
Lähde: will.com