GNU/Linux >> Linux Esercitazione >  >> Linux

Controlla l'ora e la data del tuo computer con systemd

La maggior parte delle persone si preoccupa del tempo. Ci alziamo in tempo per eseguire i nostri rituali mattutini e andare al lavoro (un viaggio breve per molti di noi di questi tempi), fare una pausa per il pranzo, rispettare la scadenza di un progetto, festeggiare compleanni e vacanze, prendere un aereo e molto altro ancora .

Alcuni di noi sono addirittura ossessionati col tempo. Il mio orologio è alimentato a energia solare e ottiene l'ora esatta dal National Institute of Standards and Technology (NIST) a Fort Collins, in Colorado, tramite la stazione radio del segnale orario WWVB situata lì. I segnali orari sono sincronizzati con l'orologio atomico, anch'esso situato a Fort Collins. Il mio Fitbit si sincronizza con il mio telefono, che viene sincronizzato con un server NTP (Network Time Protocol), che viene infine sincronizzato con l'orologio atomico.

Perché il tempo è importante per i computer

Ci sono molte ragioni per cui i nostri dispositivi e computer hanno bisogno dell'ora esatta. Ad esempio, nelle banche, nei mercati azionari e in altre attività finanziarie, le transazioni devono essere mantenute nell'ordine corretto e le sequenze temporali esatte sono fondamentali per questo.

I nostri telefoni, tablet, automobili, sistemi GPS e computer richiedono impostazioni precise di data e ora. Voglio che l'orologio sul desktop del mio computer sia corretto, così posso contare sulla mia applicazione di calendario locale per visualizzare i promemoria all'ora corretta. L'ora corretta garantisce inoltre che i lavori cron SystemV e i timer di sistema si attivino all'ora corretta.

Anche l'ora corretta è importante per la registrazione, quindi è un po' più semplice individuare voci di registro specifiche in base all'ora. Ad esempio, una volta ho lavorato in DevOps (all'epoca non si chiamava così) per il sistema di posta elettronica dello Stato della Carolina del Nord. Eravamo abituati a elaborare più di 20 milioni di e-mail al giorno. Seguire la traccia dell'e-mail attraverso una serie di server o determinare l'esatta sequenza di eventi utilizzando file di registro su host geograficamente dispersi può essere molto più semplice quando i computer in questione mantengono orari esatti.

Più volte

Gli host Linux hanno due tempi da considerare:l'ora di sistema e l'ora RTC. RTC sta per orologio in tempo reale, che è un nome elegante e non particolarmente accurato per l'orologio hardware del sistema.

L'orologio hardware funziona continuamente, anche quando il computer è spento, utilizzando una batteria sulla scheda madre del sistema. La funzione principale dell'RTC è quella di mantenere l'ora quando non è disponibile una connessione a un server dell'ora. Nei tempi bui dei personal computer, non c'era Internet per connettersi a un server dell'ora, quindi l'unica volta che un computer aveva a disposizione era l'orologio interno. I sistemi operativi dovevano fare affidamento sull'RTC all'avvio e l'utente doveva impostare manualmente l'ora del sistema utilizzando l'interfaccia di configurazione del BIOS hardware per assicurarsi che fosse corretta.

L'orologio hardware non comprende il concetto di fuso orario; solo l'ora è memorizzata nell'RTC, non il fuso orario né un offset dall'UTC (Universal Coordinated Time, noto anche come GMT o Greenwich Mean Time). Puoi impostare l'RTC con uno strumento che esplorerò più avanti in questo articolo.

L'ora di sistema è l'ora conosciuta dal sistema operativo. È l'ora che vedi sull'orologio della GUI sul desktop, nell'output di date comando, nei timestamp per i registri e negli orari di accesso, modifica e modifica ai file.

Il rtc la pagina man contiene una discussione più completa dell'RTC e degli orologi di sistema e delle funzionalità dell'RTC.

E NTP?

I computer di tutto il mondo utilizzano NTP (Network Time Protocol) per sincronizzare l'ora con gli orologi di riferimento standard di Internet attraverso una gerarchia di server NTP. I server orari primari si trovano allo strato 1 e sono collegati direttamente a vari servizi orari nazionali allo strato 0 tramite satellite, radio o persino modem tramite linee telefoniche. I servizi orari allo strato 0 possono essere un orologio atomico, un ricevitore radio sintonizzato sui segnali trasmessi da un orologio atomico o un ricevitore GPS che utilizza i segnali dell'orologio altamente precisi trasmessi dai satelliti GPS.

Più risorse Linux

  • Comandi Linux cheat sheet
  • Cheat sheet sui comandi avanzati di Linux
  • Corso online gratuito:Panoramica tecnica RHEL
  • Cheat sheet della rete Linux
  • Cheat sheet di SELinux
  • Cheat sheet dei comandi comuni di Linux
  • Cosa sono i container Linux?
  • I nostri ultimi articoli su Linux

Per evitare che le richieste di tempo dai server dell'ora o dai client più bassi nella gerarchia (cioè con un numero di strati più alto) sovraccaricano i server di riferimento primari, diverse migliaia di server NTP strato 2 pubblici sono aperti e disponibili per l'uso da parte di tutti. Molte organizzazioni e utenti (me compreso) con un gran numero di host che necessitano di un server NTP scelgono di configurare i propri server temporali, quindi solo un host locale accede ai server orari di strato 2 o 3. Quindi configurano gli host rimanenti nella rete per utilizzare il server dell'ora locale. Nel caso della mia rete domestica, si tratta di un server Stratum 3.

Opzioni di implementazione NTP

L'implementazione NTP originale è ntpd , ed è stato affiancato da due nuovi, chronyd e systemd-timesyncd . Tutti e tre mantengono l'ora dell'host locale sincronizzata con un server dell'ora NTP. Il servizio systemd-timesyncd non è robusto come chronyd, ma è sufficiente per la maggior parte degli scopi. Può eseguire grandi salti temporali se l'RTC non è sincronizzato e può regolare gradualmente l'ora del sistema per rimanere sincronizzata con il server NTP se l'ora del sistema locale si sposta leggermente. Il servizio systemd-timesync non può essere utilizzato come time server.

Chrony è un'implementazione NTP contenente due programmi:il demone chronyd e un'interfaccia a riga di comando chiamata chronyc. Come ho spiegato in un precedente articolo, Chrony ha alcune caratteristiche che lo rendono la scelta migliore per molti ambienti, principalmente:

  • Chrony può sincronizzarsi con il time server molto più velocemente del vecchio servizio ntpd. Questo è utile per laptop o desktop che non funzionano costantemente.
  • Può compensare le fluttuazioni delle frequenze di clock, ad esempio quando un host va in ibernazione o entra in modalità di sospensione, o quando la velocità di clock varia a causa del salto di frequenza che rallenta le velocità di clock quando i carichi sono bassi.
  • Gestisce le connessioni di rete intermittenti e la saturazione della larghezza di banda.
  • Si adatta ai ritardi e alla latenza della rete.
  • Dopo la sincronizzazione dell'ora iniziale, Chrony non ferma mai l'orologio. Ciò garantisce intervalli di tempo stabili e coerenti per molti servizi e applicazioni di sistema.
  • Chrony può funzionare anche senza una connessione di rete. In questo caso, l'host o il server locale possono essere aggiornati manualmente.
  • Chrony può fungere da server NTP.

Tanto per essere chiari, NTP è un protocollo implementato su un host Linux utilizzando Chrony o systemd-timesyncd.service.

I pacchetti RPM NTP, Chrony e systemd-timesyncd sono disponibili nei repository Fedora standard. L'RPM systemd-udev è un nodo dispositivo basato su regole e un gestore di eventi del kernel installato per impostazione predefinita con Fedora ma non abilitato.

Puoi installarli tutti e tre e passare da uno all'altro, ma è una seccatura e non ne vale la pena. Le versioni moderne di Fedora, CentOS e RHEL sono passate da NTP a Chrony come implementazione predefinita del cronometraggio e installano anche systemd-timesyncd. Trovo che Chrony funzioni bene, fornisca un'interfaccia migliore rispetto al servizio NTP, presenti molte più informazioni e aumenti il ​​controllo, tutti vantaggi per l'amministratore di sistema.

Disabilita altri servizi NTP

È possibile che un servizio NTP sia già in esecuzione sul tuo host. In tal caso, è necessario disabilitarlo prima di passare a qualcos'altro. Ho usato chronyd, quindi ho usato i seguenti comandi per interromperlo e disabilitarlo. Esegui i comandi appropriati per qualsiasi demone NTP che stai utilizzando sul tuo host:

[root@testvm1 ~]# systemctl disable chronyd ; systemctl stop chronyd
Removed /etc/systemd/system/multi-user.target.wants/chronyd.service.
[root@testvm1 ~]#

Verifica che sia fermo e disabilitato:

[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 ~]#

Verifica lo stato prima di iniziare

Lo stato di systemd timesync indica se systemd ha avviato un servizio NTP. Poiché non hai ancora avviato systemd NTP, il timesync-status comando non restituisce dati:

[root@testvm1 ~]# timedatectl timesync-status 
Failed to query server: Could not activate remote peer.

Ma uno status diretto richiesta fornisce alcune informazioni importanti. Ad esempio, il timedatectl comando senza un argomento o opzioni implica lo status sottocomando di default:

[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 ~]#

Questo restituisce l'ora locale dell'host, l'ora UTC e l'ora RTC. Mostra che l'ora del sistema è impostata su America/New_York fuso orario (TZ ), l'RTC è impostato sull'ora nel fuso orario locale e il servizio NTP non è attivo. L'ora RTC ha iniziato a spostarsi leggermente rispetto all'ora di sistema. Questo è normale con i sistemi i cui orologi non sono stati sincronizzati. La quantità di deriva su un host dipende dalla quantità di tempo dall'ultima sincronizzazione del sistema e dalla velocità della deriva per unità di tempo.

C'è anche un messaggio di avviso sull'utilizzo dell'ora locale per l'RTC, che si riferisce ai cambiamenti del fuso orario e alle regolazioni dell'ora legale. Se il computer è spento quando è necessario apportare modifiche, l'ora RTC non cambierà. Questo non è un problema nei server o altri host che sono alimentati 24 ore su 24, 7 giorni su 7. Inoltre, qualsiasi servizio che fornisce la sincronizzazione dell'ora NTP assicurerà che l'host sia impostato sull'ora corretta all'inizio del processo di avvio, quindi sarà corretto prima che sia completamente attivo e funzionante.

Imposta il fuso orario

Di solito, si imposta il fuso orario di un computer durante la procedura di installazione e non è mai necessario cambiarlo. Tuttavia, ci sono momenti in cui è necessario cambiare il fuso orario e ci sono un paio di strumenti per aiutare. Linux utilizza i file del fuso orario per definire il fuso orario locale utilizzato dall'host. Questi file binari si trovano in /usr/share/zoneinfo directory. L'impostazione predefinita per il mio fuso orario è definita dal link /etc/localtime -> ../usr/share/zoneinfo/America/New_York . Ma non è necessario che tu lo sappia per cambiare il fuso orario.

Ma devi conoscere il nome ufficiale del fuso orario per la tua posizione. Supponi di voler cambiare il fuso orario in 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>

Ora puoi impostare il fuso orario. Ho usato la date comando per verificare la modifica, ma puoi anche usare 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 ~]#

Ora puoi riportare il fuso orario del tuo host a quello locale.

systemd-timesyncd

Il demone systemd timesync fornisce un'implementazione NTP facile da gestire all'interno di un contesto systemd. È installato per impostazione predefinita in Fedora e Ubuntu e avviato per impostazione predefinita in Ubuntu ma non in Fedora. Non sono sicuro di altre distribuzioni; puoi controllare il tuo con:

[root@testvm1 ~]# systemctl status systemd-timesyncd

Configura systemd-timesyncd

Il file di configurazione per systemd-timesyncd è /etc/systemd/timesyncd.conf . È un file semplice con meno opzioni incluse rispetto al vecchio servizio NTP e chronyd. Ecco il contenuto completo della versione predefinita di questo file sulla mia Fedora VM:

#  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

L'unica sezione che contiene oltre ai commenti è [Time] e tutte le righe sono commentate. Questi sono i valori predefiniti e non devono essere modificati o decommentati (a meno che tu non abbia qualche motivo per farlo). Se non si dispone di un server orario NTP specifico definito in NTP= linea, l'impostazione predefinita di Fedora è di ripiegare sul pool di server temporali Fedora. Mi piace aggiungere il time server sulla mia rete a questa riga:

NTP=myntpserver

Avvia sincronizzazione temporale

L'avvio e l'abilitazione di systemd-timesyncd è come qualsiasi altro servizio:

[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 ~]#

Imposta l'orologio hardware

Ecco come si presentava uno dei miei sistemi dopo l'avvio di timesyncd:

[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    

L'ora RTC è di circa un secondo fuori dall'ora locale (EDT) e la discrepanza cresce di un paio di secondi in più nei prossimi giorni. Poiché RTC non ha il concetto di fuso orario, il timedatectl il comando deve eseguire un confronto per determinare quale fuso orario corrisponde. Se l'ora RTC non corrisponde esattamente all'ora locale, non viene considerata nel fuso orario locale.

Alla ricerca di un po' più di informazioni, ho controllato lo stato di systemd-timesync.service e ho trovato:

[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]#

Si noti il ​​messaggio di registro che dice che l'ora dell'orologio di sistema non è stata impostata o è tornata indietro. Il servizio timesync imposta l'ora di sistema da un timestamp. I timestamp vengono gestiti dal demone timesync e vengono creati ad ogni sincronizzazione dell'ora riuscita.

Il timedatectl il comando non ha la capacità di impostare il valore dell'orologio hardware dall'orologio di sistema; può solo impostare l'ora e la data da un valore inserito nella riga di comando. Tuttavia, puoi impostare l'RTC sullo stesso valore dell'ora di sistema utilizzando hwclock comando:

[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

Il --localtime l'opzione assicura che l'orologio hardware sia impostato sull'ora locale, non UTC.

Hai davvero bisogno di RTC?

Qualsiasi implementazione NTP imposterà l'orologio di sistema durante la sequenza di avvio, quindi è necessario RTC? Non proprio, purché tu abbia una connessione di rete a un time server. Tuttavia, molti sistemi non hanno accesso a tempo pieno a una connessione di rete, quindi l'orologio hardware è utile in modo che Linux possa leggerlo e impostare l'ora del sistema. Questa è una soluzione migliore rispetto a dover impostare manualmente l'ora, anche se potrebbe allontanarsi dall'ora effettiva.

Riepilogo

Questo articolo ha esplorato l'uso di alcuni strumenti di sistema per la gestione di data, ora e fusi orari. Lo strumento systemd-timesyncd fornisce un client NTP decente in grado di mantenere l'ora su un host locale sincronizzato con un server NTP. Tuttavia, systemd-timesyncd non fornisce un servizio server, quindi se hai bisogno di un server NTP sulla tua rete, devi usare qualcos'altro, come Chrony, per fungere da server.

Preferisco avere un'unica implementazione per qualsiasi servizio nella mia rete, quindi uso Chrony. Se non hai bisogno di un server NTP locale, o se non ti dispiace avere a che fare con Chrony per il server e systemd-timesyncd per il client e non hai bisogno delle funzionalità aggiuntive di Chrony, allora systemd-timesyncd è una scelta utile per un client NTP .

C'è un altro punto che voglio sottolineare:non è necessario utilizzare strumenti di sistema per l'implementazione di NTP. Puoi usare il vecchio ntpd o Chrony o qualche altra implementazione NTP. systemd è composto da un gran numero di servizi; molti di loro sono opzionali, quindi possono essere disabilitati e qualcos'altro utilizzato al suo posto. Non è l'enorme mostro monolitico che alcuni fanno sembrare. Va bene non apprezzare systemd o parti di esso, ma dovresti prendere una decisione informata.

Non mi piace l'implementazione di NTP da parte di systemd, ma preferisco di gran lunga Chrony perché soddisfa meglio le mie esigenze. E questo è ciò che riguarda Linux.

Risorse

Ci sono molte informazioni su systemd disponibili su Internet, ma molte sono concise, ottuse o addirittura fuorvianti. Oltre alle risorse menzionate in questo articolo, le seguenti pagine Web offrono informazioni più dettagliate e affidabili sull'avvio di systemd.

  • Il progetto Fedora ha una buona guida pratica a systemd. Ha praticamente tutto ciò che devi sapere per configurare, gestire e mantenere un computer Fedora usando systemd.
  • Il progetto Fedora ha anche un buon cheat sheet che incrocia i vecchi comandi SystemV con quelli di systemd comparabili.
  • Per informazioni tecniche dettagliate su systemd e sui motivi della sua creazione, consulta la descrizione di systemd di Freedesktop.org.
  • "Più divertimento di sistema" di Linux.com offre informazioni e suggerimenti più avanzati sul sistema.

C'è anche una serie di articoli profondamente tecnici per gli amministratori di sistema Linux di Lennart Poettering, il designer e sviluppatore principale di systemd. Questi articoli sono stati scritti tra aprile 2010 e settembre 2011, ma sono rilevanti ora come allora. Gran parte di tutto ciò che è stato scritto di buono su systemd e il suo ecosistema si basa su questi documenti.

  • Ripensare il PID 1
  • systemd per amministratori, parte I
  • sistema per amministratori, parte II
  • sistema per amministratori, parte III
  • systemd per amministratori, parte IV
  • sistema per amministratori, parte V
  • sistema per amministratori, parte VI
  • sistema per amministratori, parte VII
  • systemd per amministratori, parte VIII
  • systemd per amministratori, parte IX
  • sistema per amministratori, parte X
  • systemd per amministratori, parte XI

Linux
  1. Registra il tuo terminale con script e scriptreplay

  2. Come visualizzare la data e l'ora di riavvio del sistema Linux

  3. Imposta la data e l'ora del sistema usando C++ in Linux

  4. Cronologia dei comandi di Linux con data e ora

  5. In Linux come creare un file con un nome che sia la data e l'ora correnti

Come impostare data, ora e fuso orario in RHEL 8

Come trovare la data e l'ora di installazione del sistema operativo Linux

Controlla l'utilizzo di RAM e CPU da parte di Kodi in tempo reale

Come impostare data e ora su Linux

Leggi e analizza i tuoi log di sistema Linux con Journalctl

Come modificare data, ora e fuso orario in Linux Mint 20