Perché l'orologio di Ubuntu sta diventando sempre più lento?


16

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

Ubuntu Time & Date v. L'ora ufficiale degli Stati Uniti

Dove posso iniziare a risolvere questo problema?

Presumibilmente viene impostato "automaticamente da Internet". Come posso verificare che "Internet" sappia che ore sono?

Dettagli

Ubuntu ha avuto molto 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 temporale che ho trovato tramite una ricerca Web sembra conoscere l'ora corretta:

$ 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 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 va 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))
'

Clock time v. Time server offset


Contesto: ntp è un ottimo strumento per mantenere un tempo preciso . Tuttavia, ci vuole un tempo finito (diversi minuti o addirittura ore) per arrivare all'ora corrente da un tempo errato. Ciò è legato ai server ntp (a scelta) e alla latenza di Internet a questi. @Floyd ha delineato un collegamento per forzare rapidamente l'ora corretta. Ma tempi migliori (e utilizzo di ntp ) richiedono un'attenta selezione dei server ntp.
david6,

La mia macchina fa questo ... mi fa impazzire ... Devo tornare indietro di 20 minuti ogni settimana ...
TheXed

La prima cosa che vorrei provare a fare è cambiare la batteria sulla scheda madre ....
TheXed

Risposte:


17

ntp fa bene a mantenere il computer impostato al momento giusto e lo fa senza mai eseguirlo all'indietro, il che sarebbe una brutta cosa per alcuni programmi che potresti eseguire.

Non solo imposta il tempo, ma regola continuamente il modo in cui il tuo computer tiene il tempo in modo che il suo tempo non sia giusto solo in un istante nel tempo, ma rimanga vicino al tempo reale (entro dozzine di millisecondi, non dozzine di minuti) . Regola sia la fase (l'ora) sia la frequenza (quanto velocemente l'orologio "ticchetta"). ntp non fa mai tornare indietro l'orologio. Può richiedere molto tempo per stabilire la velocità con cui spuntare l'orologio dopo un riavvio, quindi ntp tiene traccia della deriva in un file chiamato /var/lib/ntp/ntp.drift. Dal momento che non si esegue ntp, non succede nulla di tutto ciò.

ntp non è così popolare come una volta perché dormiva laptop e desktop e le macchine virtuali ne impediscono l'esecuzione per un po 'di tempo. È progettato per funzionare di tanto in tanto secondo la propria pianificazione su un computer che è sempre in esecuzione e nel mondo reale in cui il tempo è continuo. Questo è probabilmente il motivo per cui non è installato per impostazione predefinita sulla workstation moderna. [Per Vmware, vedi questo]

Invece ntpdate viene eseguito quando viene visualizzata l'interfaccia di rete. Quando un laptop addormentato viene riattivato , ripristina la connessione di rete, viene eseguito ntpdate e l'ora è nuovamente corretta. Se l'orologio hardware della macchina è abbastanza accurato e la rete viene portata su e giù abbastanza spesso, è generalmente abbastanza buono per la maggior parte delle persone.

Per qualche ragione, ntpdate non funziona sempre. Utilizzare ntpdate-debian invece in questo caso. La sintassi per for.mer è qualcosa di simile a ntpdate ntp.ubuntu.com , per quest'ultimo è ntpdate-debian

In assenza di una di queste cose, allora ntp è un modo migliore per risparmiare tempo.

I sistemi sono progettati per prendere un interrupt timer ogni tanto e aggiornare la sua idea del tempo ogni interrupt. Finché il timer hardware è in esecuzione su specifica. il tempo non va troppo alla deriva. Se il timer hardware non lo è, il tempo passerà di più (tutti questi orologi andranno alla deriva, per lo stesso motivo per cui lo faranno l'orologio da polso o l'orologio a batteria. Gli orologi collegati al muro sono sincronizzati con l'ora dalla frequenza e dalla fase mantenute da la tua compagnia elettrica).

La maggior parte dei timer per computer sono controllati da un circuito oscillatore controllato a cristallo sui suoi circuiti integrati. Nonostante il cristallo, corrono sempre più lentamente a seconda dell'ambiente, principalmente della temperatura. A meno che tu non abbia un po 'di tempo per la sincronizzazione del software installato di cui non siamo a conoscenza, direi che l'orologio del tuo sistema è fuori specifica.

Se dovessi eseguire ntp per un giorno o due, memorizzerebbe le informazioni in /var/lib/ntp/ntp.drift che indicherebbero quanto dovrebbe adeguare la velocità con cui il tuo sistema operativo avanza per interruzione per interrompere abbina la frequenza di clock dell'hardware con il tempo reale che passa su Internet. Mantenere lo stesso file e avviare e arrestare ntp dopo un minuto (supponendo che il file /var/lib/ntp/ntp.drift rimanga invariato) potrebbe fare molto per correggere questo se il bias ntp del clock rimane dopo ntp finisce. Non sono sicuro di questo dettaglio.

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

Se questa macchina è sempre in esecuzione, la cosa migliore da fare è installare ntp e lasciarlo fare la sua cosa. Vedi le altre risposte per i dettagli su come ottenere il tempo giusto prima di avviarlo. Corro ntp sul mio desktop e ntpdate sul mio laptop.

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

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

Avvertire alcuni software può dare di matto se il tempo del computer va indietro. L'esecuzione di ntpdate dopo l' avvio potrebbe causare ciò.

Un problema, questo può essere un problema: ricordo che ntp si aspetta che il tempo non sia troppo lontano. Se lo è, cercando di agire in modo conservativo, ntp non aggiusterà il tempo. Se ti trovi in ​​questa situazione, ha senso fare entrambe le cose: esegui ntpdate all'avvio per inizializzare l'ora al momento giusto, quindi esegui ntp per mantenerlo in esecuzione per fornire un cronometraggio accurato. In particolare una batteria della scheda madre difettosa può causare questo errore, così come l'avvio di un computer spento da molto tempo.


Grande spiegazione John! Solo una piccola cosa: la data / ora sulla maggior parte delle schede madri è gestita da un RTC separato (orologio in tempo reale), che utilizza il proprio cristallo 32.768 KHz (perché dividere quella frequenza per 2 ^ 15 ti dà esattamente un secondo), e l'FSB l'orologio, che di solito è a 100+ MHz, non ha nulla a che fare con il mantenimento della data e dell'ora - se così over / underclocking lo rovinerebbe - invece di solito è una deriva di cristallo nel modulo / circuito RTC. Puoi cercare questo problema e rispondere al commento e / o modificare la tua risposta per riflettere questo?
Ish,

Farò entrambe le cose! Ho rimosso la menzione di over-clock poiché penso sia improbabile, come avevo detto. Tuttavia, RTC viene utilizzato per impostare l'ora all'avvio. Come menziona il tuo commento, è preciso solo per 1 secondo. La man rtcpagina dice: "Gli RTC non devono essere confusi con l'orologio di sistema, che è un orologio software gestito dal kernel e usato per implementare gettimeofday (2) ..." Non so se l'orologio di sistema è correlato all'orologio FSB . Osservando la configurazione del kernel, l'ultimo kernel i386 preciso di Ubuntu ha il clock di sistema aggiornato a 250Hz. Grazie per il commento!
John S Gruber,

@izx Sul mio sistema portatile il kernel utilizza HPET come sorgente di clock. È configurabile Wikipedia afferma che questo fa parte della funzione southbridge. Non so che cosa dice del suo rapporto con l'FSB, ma ho capito che l'FSB fa parte del Northbridge.
John S Gruber,

Grazie, John e @izx. Sono felice per la completezza di questo. Spero che tu non lo prenda sul personale, invece l'ho contrassegnato come accettato. Penso che sarà la lettura migliore per i futuri visitatori.
ændrük,

@ ændrük: nessun problema, come puoi vedere ho apprezzato molto anche la completezza di John.
Ish,

12

- Di solito il tempo viene sincronizzato solo una volta ad ogni avvio o al risveglio dal sonno

Quindi il problema sembra essere che il time server predefinito di Ubuntu (che cos'è?) Ha l'ora errata, oppure Ubuntu non sta impostando l'ora automaticamente da Internet.

No, il time server di Ubuntu è corretto e imposta automaticamente l'ora da esso.

Il problema è che di solito si verifica una sola volta ad ogni avvio (o, per essere più precisi, ogni volta che viene visualizzata un'interfaccia di rete, sia da arresto, sospensione o ibernazione). In base al tempo di attività, è sicuro di dire che non è stato sincronizzato per più di una settimana. E l'orologio di sistema funziona leggermente veloce per qualche motivo.

- Imposta un cronprocesso orario da sincronizzare se non riavvii spesso o il tuo server / desktop non va mai in modalità sospensione

La tua scommessa migliore è creare un cron-job, direi ogni ora se vuoi un tempo super preciso. Il modo più semplice per farlo è:

  • sudo editor /etc/cron.hourly/ntpsync

Aggiungi le seguenti righe:

#! / Bin / bash

ntpdate ntp.ubuntu.com #o scelta del server
  • salva, esci e sudo chmod +x /etc/cron.hourly/ntpsync

/etc/cron.dailySe lo desideri, puoi inserirlo per una volta al giorno.


Spot on. Lo accetto per aver risposto correttamente alla mia domanda sul motivo per cui l'orologio è sbagliato, ma sono scettico su questa soluzione alternativa. Dovrò saperne di più su questo prima di decidere quale azione intraprendere.
ændrük,

Se si imposta il server desiderato nel file ntp.conf, è necessario ridefinirlo qui?
Snekse,

6

Questo può accadere se hai installato il demone time ntp e il tempo sul tuo computer è troppo lontano per correggerlo rapidamente.

Per ripararlo aprire un terminale e fare

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

Cosa fa questo:

  1. Ferma il demone ntp
  2. Imposta l'orologio
  3. Ora dovrebbe essere il momento giusto
  4. riavvia il demone ntp

Se non hai installato ntp, fallo con

  sudo apt-get install update

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

Il ntpdate farà 'saltare' l'ora ogni ora circa. L'uso di ntp evita questo problema, perché regolerà il tempo inclinando l'orologio. Inoltre, mentre la selezione di un server NTTP 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.

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


/etc/init.d/ntpnon esiste. Questa è un'installazione di Ubuntu 12.04 abbastanza recente e non ho deliberatamente cambiato nulla legato al tempo.
ændrük,

Quindi consiglio di installarlo.
Floyd,

Per quanto possibile, preferisco non immischiarmi nella configurazione e nei servizi di tutto il sistema. Se questo file non è installato per impostazione predefinita, perché dovrebbe essere necessario che le impostazioni predefinite di ora e data funzionino?
ændrük,

1
L'ora è corretta dopo un riavvio? Sospetto che l'aggiornamento dell'orologio esegua ntpdate solo una volta. Alcuni sistemi hanno il problema che l'orologio di sistema gestito da Linux funziona troppo velocemente. L'ho avuto in particolare con i sistemi che funzionano come macchine virtuali.
Floyd,

1
Se questo problema persiste dopo il riavvio o l'arresto, è possibile che la tua cella CMOS sia morta in MOBO.
atenz,

1

Ho avuto un problema simile ed è stato causato da qualcosa nel firewall. Alla fine ho aggiunto il cron job orario ma ho aggiunto l' -uargomento ntpdateper farlo usare una porta nessuna standard.

Il mio problema è stato causato dal fatto che Ubuntu non controllava se ntpdatefunzionava, ma supponeva automaticamente che avrebbe funzionato.

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.