Perché l'orologio di Ubuntu sta rallentando o rallentando?

16

L'orologio di Ubuntu è spento di circa mezz'ora:

Da dove comincio a risolvere questo problema?

È presumibilmente impostato "automaticamente da Internet". Come posso verificare che "Internet" sappia che ore sono?

Dettagli

Ubuntu ha avuto tutto il tempo per comunicare con Internet:

$ date; uptime
Fri May 18 05:56:00 PDT 2012
 05:56:00 up 12 days, 10:48,  2 users,  load average: 0.61, 0.96, 1.15

Questo server time trovato tramite una ricerca sul Web sembra conoscere l'ora esatta:

$ date; ntpdate -q north-america.pool.ntp.org
Fri May 18 05:56:09 PDT 2012
server 208.38.65.37, stratum 2, offset 1752.625337, delay 0.10558
server 46.166.138.172, stratum 2, offset 1752.648597, delay 0.10629
server 205.189.158.228, stratum 3, offset 1752.672466, delay 0.11829
18 May 05:56:18 ntpdate[29752]: step time server 208.38.65.37 offset 1752.625337 sec

Non ci sono errori segnalati relativi a NTP:

$ grep -ic ntp /var/log/syslog
0

Dopo il riavvio, l'ora è stata corretta automaticamente e il seguente è apparso in /var/log/syslog :

May 18 17:58:12 aux ntpdate[1891]: step time server 91.189.94.4 offset 1838.497277 sec

Un registro dell'offset riportato da ntpdate rivela che l'orologio sta andando alla deriva di circa 9 secondi ogni ora:

$ while true; do ntpdate-debian -q | tail -n 1 >> 'drift.log'; sleep 16m; done
^C
$ r -e '
    attach(read.table("drift.log", header=FALSE))
    clock <- as.POSIXct(paste(V1, V2, V3), format="%d %b %H:%M:%S")
    fit <- lm(V10~clock)
    png("drift.png")
    plot(clock, V10, xlab="Clock time", ylab="Time server offset (s)")
    abline(fit)
    mtext(sprintf("Drift rate: %.2f s/hr", fit$coefficients[[2]]*3600))
'

    
posta ændrük 18.05.2012 - 14:59

4 risposte

17

ntp fa bene a mantenere il tuo computer impostato al momento giusto, e lo fa senza mai farlo andare indietro, il che sarebbe un aspetto negativo per alcuni programmi che potresti essere in esecuzione.

Non solo imposta il tempo, ma modifica continua su come il tuo computer tiene il tempo in modo che il suo tempo non sia solo giusto in un istante, ma sia vicino al tempo reale ( entro decine di millisecondi, non dozzine di minuti). Regola sia la fase (il tempo) che la frequenza (quanto velocemente l'orologio "ticchetta"). ntp non fa mai girare il clock all'indietro. Può essere necessario molto tempo per stabilire la velocità di spuntare l'orologio dopo un riavvio, quindi ntp tiene traccia della deriva in un file chiamato /var/lib/ntp/ntp.drift. Dato che non stai usando ntp, niente di tutto questo accade.

ntp non è così popolare come lo era una volta perché computer portatili e desktop dormienti, e le macchine virtuali impedivano di eseguire una parte del tempo. È progettato per funzionare ogni tanto sul proprio programma su un computer che è in esecuzione tutto il tempo, e nel mondo reale dove il tempo è continuo. Questo è probabilmente il motivo per cui non è installato di default sulla workstation moderna. [Per Vmware, vedi questo]

Invece ntpdate viene eseguito quando viene visualizzata l'interfaccia di rete. Quando un laptop che dorme viene risvegliato, ristabilisce la connessione di rete, viene eseguito ntpdate e l'ora è di nuovo corretta. Se l'orologio hardware della macchina è abbastanza preciso e la rete viene attivata abbastanza spesso, generalmente è abbastanza buona per la maggior parte delle persone.

Per qualche motivo, lo stock ntpdate non sempre funziona. In questo caso, usa ntpdate-debian . La sintassi per for.mer è qualcosa come ntpdate ntp.ubuntu.com , per quest'ultimo è ntpdate-debian

In assenza di una di queste cose, ntp è un modo migliore per mantenere il tempo.

I sistemi sono progettati per interrompere un timer ogni tanto e aggiornare la sua idea del tempo di ogni interruzione. Finché il timer hardware è in esecuzione su specifiche. il tempo non scivola troppo. Se il timer dell'hardware non lo è, il tempo si sposta di più (tutti gli orologi di questo tipo ne deriveranno, per lo stesso motivo dell'orologio da polso o dell'orologio a batteria. Gli orologi collegati al muro sono sincronizzati all'ora dalla frequenza e dalla fase mantenute da la tua compagnia elettrica).

La maggior parte dei timer del computer sono controllati da un circuito oscillatore controllato a cristalli sui suoi circuiti integrati. Nonostante il cristallo, corrono più velocemente e più lentamente a seconda dell'ambiente, principalmente della temperatura. A meno che tu non abbia installato un software di sincronizzazione temporale che non conosciamo, direi che l'orologio del tuo sistema è spento.

Se dovessi eseguire ntp per un giorno o due, memorizzerebbe le informazioni in /var/lib/ntp/ntp.drift che indicherebbe quanto avrebbe dovuto regolare la velocità con cui il tempo del sistema operativo aumenta per interruzione al fine di far coincidere la frequenza di clock dell'hardware con il tempo reale in cui passa su Internet. Mantenere il file allo stesso modo e iniziare e fermare ntp dopo un minuto (supponendo di mantenere invariato il file /var/lib/ntp/ntp.drift) potrebbe fare molto per correggere questo se i set di ntp di bias di clock rimangono dopo le estremità di ntp . Non sono sicuro di questo dettaglio.

Sospetto che il valore ntp memorizzerebbe in /var/lib/ntp/ntp.drift è molto diverso dal mio.

Se questa macchina viene mantenuta sempre in esecuzione, tuttavia, la cosa migliore da fare è installare ntp e lasciare che faccia il suo esempio. Vedi le altre risposte per i dettagli su come ottenere il tempo giusto prima di avviarlo. Eseguo ntp sul mio desktop e ntpdate sul mio laptop.

Un'interessante alternativa possibile, adjtimex, è menzionata in questa risposta di nealmcb.

Se il tuo sistema non viene tenuto sempre in esecuzione, eseguire ntpdate all'avvio sembra una buona opzione.

Attenzione alcuni software possono impazzire se i computer tornano indietro. L'avvio di ntpdate dopo potrebbe causare il verificarsi di questo errore.

Un getcha, che può essere un problema: ricordando che ntp si aspetta che il tempo non sia troppo lontano. Se lo è, provando ad agire in modo conservativo, ntp non regolerà affatto il tempo. Se ti trovi in ​​questa situazione ha senso fare entrambe le cose - lanciare ntpdate all'avvio per ottenere il tempo inizializzato al momento giusto, e poi lasciare che ntp venga eseguito per mantenere funziona per fornire un cronometraggio preciso. In particolare una batteria difettosa della scheda madre può causare questo errore, così come l'avvio di un computer spento da molto tempo.

    
risposta data John S Gruber 08.06.2012 - 23:24
12

- Solitamente il tempo viene sincronizzato una sola volta a ogni avvio o wakeup-from-sleep

  

Quindi il problema sembra essere o che il server temporale predefinito di Ubuntu (che cos'è?) abbia l'ora sbagliata, oppure Ubuntu non sta impostando l'ora automaticamente da Internet.

No, il server orario di Ubuntu è corretto e sta impostando l'ora automaticamente da esso.

Il problema è che di solito si verifica solo una volta su ogni avvio (o per essere più precisi, ogni volta che viene attivata un'interfaccia di rete - se dallo spegnimento, dormire o ibernazione). In base al tempo di attività, è sicuro che non è stato sincronizzato in più di una settimana. E il tuo orologio di sistema sta funzionando leggermente veloce per qualche motivo.

: configura un lavoro cron orario da sincronizzare se non si riavvia spesso o il server / desktop non va mai a dormire

La soluzione migliore è impostare un cron-job, direi ogni ora se si desidera un tempo super preciso. Il modo più semplice per farlo è:

  • sudo editor /etc/cron.hourly/ntpsync

Aggiungi le seguenti linee:

#!/bin/bash

ntpdate ntp.ubuntu.com #or your choice of server
  • salva, esci e sudo chmod +x /etc/cron.hourly/ntpsync

Puoi inserire questo valore in /etc/cron.daily , se lo desideri, per una volta al giorno.

    
risposta data ish 18.05.2012 - 16:16
6

Ciò può accadere se è stato installato il daemon time ntp e il tempo sulla macchina è troppo lontano per correggersi rapidamente.

Per risolvere il problema, apri un terminale e fallo

  sudo service ntp stop
  sudo ntpdate swisstime.ethz.ch
  date
  sudo service ntp start

Che cosa fa:

  1. Arresta il daemon ntp
  2. Imposta orologio
  3. L'ora dovrebbe essere corretta
  4. restart daemon ntp

Se non hai installato ntp, fallo con

  sudo apt-get install update

Aggiornamento: L'uso di ntpdate in un cron job, come è stato raccomandato qui, porta a problemi sottili.

Il ntpdate farà il salto del tempo ogni ora circa. L'uso di ntp evita questo problema, perché regolerà il tempo inclinando l'orologio. Inoltre, mentre si seleziona un server ntp nelle vicinanze offre una precisione ancora maggiore, non è necessario. Il file di configurazione ntp predefinito contiene diversi server e il server compensa automaticamente eventuali ritardi.

Conclusione:  - usa ntp  - se sei lontano, spegni ntp, esegui ntpdate una volta e riavvia ntp.

    
risposta data Floyd 18.05.2012 - 15:07
1

Ho avuto un problema simile ed è stato causato da qualcosa nel firewall. Alla fine ho aggiunto il lavoro cron ogni ora, ma ho aggiunto l'argomento -u a ntpdate per farlo utilizzare una porta standard nulla.

Il mio problema è stato causato da Ubuntu che in realtà non verificava se ntpdate funzionasse ma automaticamente supponendo che avrebbe funzionato.

    
risposta data Axel 14.09.2012 - 01:06

Leggi altre domande sui tag