Forza systemd timesyncd a sincronizzare immediatamente l'ora con il server NTP


16

Ho configurato systemd timesyncd per ottenere l'ora da un server NTP:

/etc/systemd/timesyncd.conf > NTP=ca.pool.ntp.org
systemctl restart systemd-timesyncd.service 
timedatectl set-ntp true

Lo stato è il seguente:

$ timedatectl status
...
Network time on: yes
NTP synchronized: no

Come implica l'output, il tempo non è ancora sincronizzato. Qualcuno può aiutarmi con le seguenti domande?

  • Quanto tempo impiegherà timesyncd a sincronizzarsi con l'NTP? A quali intervalli lo fa, dove posso controllarli e modificarli?
  • In casi urgenti: posso solo impostare l'ora manualmente o forzare la sincronizzazione immediata di timesyncd con il server NTP?

Risposte:


10

Per utilizzare un'implementazione NTP effettiva, è necessario installarne e configurarne una chronyo forse ntpd. Fatelo se avete bisogno di un monitoraggio delle prestazioni temporali. Supporrò Chrony.

Aggiungi iburstal tuo poolo server linee nella tua configurazione per accelerare i pochi pacchetti iniziali. Potrebbero volerci ancora un paio di minuti per stabilizzarsi, sii paziente.

chronyc trackingmostrerà l'offset corrente. Avere un'idea di quali siano le vostre esigenze, un secondo di precisione può facilmente tollerare decine di millisecondi di offset.

chronyc makestepeffettuerà immediatamente la regolazione corrente. Di solito non è necessario.


timesyncdè un client SNTP che può impostare l'ora, ma non disciplinarla gradualmente e continuamente, né filtrare il server NTP remoto in base alla qualità . (Inoltre, non è in grado di parlare con l'hardware del tempo o PTP, solo il protocollo NTP.) Un po 'meglio di quanto ripetuto ntpdate, con il quale intendo un orologio non molto buono. Personalmente, lo sostituisco sulla maggior parte dei server.

L'unico modo per impostare il tempo con timesyncd è manualmente: timedatectl set-time "2019-01-15 00:40:16". Non ha mezzi robusti per disciplinare e monitorare l'orologio. Le statistiche NTP di base tramite timedatectl timesync-statussono una cosa relativamente nuova, non credo che l'opzione sia disponibile in Red Hat 7 o Ubuntu 18.04.

systemd definisce "sincronizzato" come se NTP fosse mai usato per dire a Linux di regolare l'orologio. In particolare, se la disciplina del kernel chiama adjtimex () restituito senza errori, e non lo stato iniziale. Vedi il codice sorgente, systemd / src / basic / time-util.c.


Grazie per la tua risposta, John. Quindi in effetti posso disabilitare systemd-timesyncd e usare solo chrony? Non sono del tutto sicuro di capire perché systemd abbia un'opzione NTP e si chiama timeSYNCd se in realtà non è in grado di sincronizzare l'ora? "Systemd definisce" sincronizzato "come se la disciplina del kernel NTP chiamasse adjtimex () restituito senza errori, e non lo stato iniziale" - questo non mi è molto chiaro.
manifestante

1
@chevallier systemd-timesyncd è molto semplice ed è abbastanza buono per i casi più comuni, ad esempio un server con un orologio in tempo reale che dovrebbe essere in esecuzione e sulla rete 24x7. Il tuo non è un caso comune, quindi probabilmente non dovresti usarlo. chrony è molto più bravo a gestire le interruzioni della connettività di rete e ad essere spento per lunghi periodi (ad es. un laptop) o non avere affatto un RTC (ad es. dispositivi embedded).
Michael Hampton,

1
timesyncd è un client SNTP, quindi imposta l'ora senza disciplinarla correttamente. Il che va bene per i requisiti di precisione approssimativa. Se si desidera misurare le prestazioni temporali o attendere fino alla sincronizzazione, utilizzare un NTP completo come chrony o ntpd.
John Mahowald,

11

Senza installare altri pacchetti ... Disattiva NTP, imposta manualmente l'ora in modo che sia abbastanza vicina , riattiva NTP:

Impostare il servizio NTP inattivo

$ timedatectl set-ntp false

Imposta l'ora manualmente

Sì, è triste ma funziona e non c'è bisogno di perdere tempo a installare nulla e farlo funzionare. Ottieni l' ora LOCALE approssimativa dall'orologio a muro, dal telefono, da Internet. Non ha bisogno di essere perfetto perché riaccendiamo ntp tra un momento ...

$ sudo timedatectl set-time "2019-06-22 13:41:00"

Imposta il servizio NTP attivo

$ sudo timedatectl set-ntp true

Aspettare

john@mybox:~$ timedatectl
               Local time: Sat 2019-06-22 13:49:53 AEST
           Universal time: Sat 2019-06-22 03:49:53 UTC
                 RTC time: Sat 2019-06-22 03:49:54
                Time zone: Australia/Sydney (AEST, +1000)
System clock synchronized: no
              NTP service: active
          RTC in local TZ: no

Il "Clock di sistema sincronizzato: no" si trasformerà in "sì" quando è stato regolato abbastanza da essere considerato "sincronizzato".

Risoluzione dei problemi

$ cat /etc/systemd/timesyncd.conf
[Time]
NTP=pool.ntp.org

$ timedatectl timesync-status
       Server: 13.210.208.89 (au.pool.ntp.org)
Poll interval: 8min 32s (min: 32s; max 34min 8s)
 Packet count: 0

$ grep systemd-timesyncd /var/log/syslog | tail
Jun 22 14:13:09 meebox systemd-timesyncd[8333]: Timed out waiting for reply from 103.214.220.220:123 (au.pool.ntp.org).

I miei pacchetti ntp venivano bloccati dal firewall aziendale.


Anche l'installazione di un altro servizio di sincronizzazione temporale è stata la mia prima idea, ma è solo una soluzione alternativa. Stavo cercando una vera soluzione. Questa è la tua risposta. Funziona. Grazie :-)
Ingo
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.