Pourquoi l'horloge d'Ubuntu devient-elle plus lente ou plus rapide?

16

L'horloge d'Ubuntu est éteinte d'environ une demi-heure:

Ubuntu Time & Date v. L'heure officielle des États-Unis

Où puis-je même commencer à résoudre ce problème?

Il serait réglé "automatiquement depuis Internet". Comment puis-je vérifier que "Internet" sait quelle heure il est?

Détails

Ubuntu a eu beaucoup de temps pour communiquer avec 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

Ce serveur de temps que j'ai trouvé via une recherche sur le Web semble connaître l'heure correcte:

$ 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

Aucune erreur liée au NTP n'a été signalée:

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

Après le redémarrage, l'heure a été automatiquement corrigée et les informations suivantes sont apparues dans /var/log/syslog:

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

Un journal du décalage rapporté par ntpdate révèle que l'horloge dérive d'environ 9 secondes toutes les heures:

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

Heure d'horloge v. Décalage du serveur de temps

ændrük
la source
Contexte: ntp est un excellent outil pour maintenir l'heure exacte . Mais, il faut un temps fini (plusieurs minutes, voire des heures) pour arriver à l'heure actuelle à partir d'une heure incorrecte. Ceci est lié aux serveurs ntp (votre choix) et à votre latence Internet. @Floyd a décrit un raccourci pour forcer rapidement l'heure correcte. Mais un meilleur temps (et l'utilisation de ntp ) nécessite une sélection rigoureuse des serveurs ntp.
david6
Ma voiture fait ça ... me rend fou ... Je dois faire reculer le temps de 20 minutes chaque semaine ...
TheXed
La première chose que j'essaierais de faire est de changer la batterie de la carte mère ....
TheXed

Réponses:

17

ntp réussit bien à garder votre ordinateur réglé au bon moment, et le fait sans jamais l'exécuter à l'envers - ce qui serait une mauvaise chose pour certains programmes que vous pourriez exécuter.

Il règle non seulement l'heure, mais il ajuste continuellement la façon dont votre ordinateur garde l'heure afin que son heure ne soit pas juste à un instant donné, mais reste proche du temps réel (en quelques dizaines de millisecondes, pas en dizaines de minutes) . Il ajuste à la fois la phase (le temps) et le taux (à quelle vitesse l'horloge "tique"). ntp ne fait jamais tourner l'horloge en arrière. Il peut prendre un certain temps pour déterminer la vitesse à laquelle le chronomètre doit être activé après un redémarrage, donc ntp garde une trace de la dérive dans un fichier appelé /var/lib/ntp/ntp.drift. Puisque vous n'exécutez pas ntp, rien de tout cela ne se produit.

ntp n'est pas aussi populaire qu'il l'était autrefois car les ordinateurs portables et de bureau en veille et les machines virtuelles l'empêchent de fonctionner une partie du temps. Il est conçu pour s'exécuter de temps en temps selon son propre calendrier sur un ordinateur qui fonctionne tout le temps et dans le monde réel où le temps est continu. C'est probablement pourquoi il n'est pas installé par défaut sur le poste de travail moderne. [Pour Vmware, voir ceci]

Au lieu de cela, ntpdate est exécuté lorsque l'interface réseau est activée . Lorsqu'un ordinateur portable en veille est réveillé, il rétablit la connexion réseau, ntpdate est exécuté et l'heure est à nouveau correcte. Si l'horloge matérielle de la machine est assez précise et que le réseau monte et descend assez souvent, c'est généralement assez bon pour la plupart des gens.

Pour une raison quelconque, stock ntpdate ne fonctionne pas toujours. Utilisez plutôt ntpdate-debian dans ce cas. La syntaxe du for.mer est quelque chose comme ntpdate ntp.ubuntu.com , pour ce dernier, c'est ntpdate-debian

En l'absence d'une de ces choses, alors ntp est une meilleure façon de garder le temps.

Les systèmes sont conçus pour prendre une interruption de minuterie de temps en temps et mettre à jour son idée de l'heure à chaque interruption. Tant que le minuteur matériel fonctionne selon les spécifications. le temps ne dérive pas trop. Si la minuterie matérielle ne l'est pas, l'heure dérivera davantage (toutes ces horloges en dériveront, pour la même raison que votre montre-bracelet ou votre horloge contrôlée par batterie. Les horloges branchées sur le mur sont synchronisées avec l'heure par la fréquence et la phase conservées par votre compagnie d'électricité).

La plupart des minuteries informatiques sont contrôlées par un circuit oscillateur contrôlé par cristal sur ses circuits intégrés. Malgré le cristal, ils fonctionnent plus vite et plus lentement en fonction de l'environnement, principalement de la température. À moins que vous n'ayez installé un logiciel de synchronisation temporelle que nous ne connaissons pas, je dirais que l'horloge de votre système est hors spécification.

Si vous deviez exécuter ntp pendant un jour ou deux, il stockerait des informations dans /var/lib/ntp/ntp.drift qui indiqueraient combien il faudrait pour ajuster la vitesse à laquelle votre système d'exploitation avance par interruption afin de faire correspondre votre fréquence d'horloge matérielle avec le temps réel qu'il obtient sur Internet. Garder le fichier identique et juste démarrer et arrêter ntp après une minute après cela (en supposant que vous gardez le fichier /var/lib/ntp/ntp.drift inchangé) pourrait faire beaucoup pour corriger cela si le biais d'horloge ntp définit reste après ntp se termine. Je ne suis pas sûr de ce détail.

Je soupçonne que la valeur que ntp stockerait dans /var/lib/ntp/ntp.drift est très différente de la mienne.

Si cette machine continue de fonctionner tout le temps, cependant, la meilleure chose à faire est d'installer ntp et de le laisser faire. Voir les autres réponses pour plus de détails sur la façon de choisir le bon moment avant de le démarrer. Je lance ntp sur mon bureau et ntpdate sur mon ordinateur portable.

Une alternative intéressante possible, adjtimex, est mentionnée dans cette réponse par nealmcb.

Si votre système ne fonctionne pas tout le temps, l'exécution de ntpdate au démarrage semble être une bonne option.

Attention, certains logiciels peuvent paniquer si le temps de l'ordinateur recule. L'exécution de ntpdate après le démarrage peut provoquer ce problème .

Un problème, cela peut être un problème: Si je me souviens bien, ntp s'attend à ce que le temps ne soit pas trop éloigné. Si c'est le cas, en essayant d'agir de manière conservatrice, ntp n'ajustera pas du tout l'heure. Si vous êtes dans cette situation, il est logique de faire les deux: exécutez ntpdate au démarrage pour obtenir l'heure initialisée au bon moment, puis laissez ntp s'exécuter pour qu'il continue à fonctionner pour fournir un chronométrage précis. En particulier, une mauvaise batterie de la carte mère peut provoquer cette erreur, tout comme le démarrage d'un ordinateur éteint depuis longtemps.

John S Gruber
la source
Grande explication John! Juste une petite chose - la date / heure sur la plupart des cartes mères est maintenue par un RTC (horloge en temps réel) distinct, qui utilise son propre cristal à 32,768 KHz (car diviser cette fréquence par 2 ^ 15 vous donne précisément une seconde), et le FSB L'horloge, qui est généralement à 100+ MHz, n'a rien à voir avec le maintien de la date et de l'heure - si le sur / sous-cadencement le gâcherait - au lieu de cela, il s'agit généralement d'une dérive cristalline dans le module / les circuits RTC. Pouvez-vous rechercher ce problème et répondre au commentaire et / ou modifier votre réponse pour refléter cela?
ish
Je ferai les deux! J'ai supprimé la mention de l'overclocking car je pense que c'est improbable, comme je l'avais dit. Cependant, le RTC est juste utilisé pour régler l'heure au démarrage. Comme votre commentaire le mentionne, il n'est précis qu'à 1 seconde. La man rtcpage dit: "Les RTC ne doivent pas être confondus avec l'horloge système, qui est une horloge logicielle maintenue par le noyau et utilisée pour implémenter gettimeofday (2) ..." Je ne sais pas si l'horloge système est liée à l'horloge FSB . En regardant la configuration du noyau, le dernier noyau Ubuntu précis i386 a mis à jour l'horloge système à 250 Hz. Merci pour le commentaire!
John S Gruber
@izx Sur mon ordinateur portable, le noyau utilise le HPET comme source d'horloge. C'est configurable. Wikipedia dit que cela fait partie de la fonction Southbridge. Je ne sais pas ce que cela dit de sa relation avec le FSB, mais je suppose que le FSB fait partie du Northbridge.
John S Gruber
Merci, John et @izx. Je suis ravi de l'exhaustivité de cela. izx, j'espère que vous ne considérerez pas personnellement que je l'ai marqué comme accepté à la place. Je pense que ce sera la meilleure lecture pour les futurs visiteurs.
ændrük
@ ændrük: pas de problème du tout, comme vous pouvez le voir, j'ai également beaucoup apprécié la rigueur de John.
ish
12

- Le temps n'est généralement synchronisé qu'une seule fois à chaque démarrage ou à la sortie du sommeil

Le problème semble donc être soit que le serveur de temps par défaut d'Ubuntu (qu'est-ce que c'est?) A l'heure incorrecte, soit qu'Ubuntu ne règle pas l'heure automatiquement depuis Internet.

Non, le serveur de temps d'Ubuntu est correct et il règle automatiquement l'heure à partir de celui-ci.

Le problème est qu'il ne se produit généralement qu'une seule fois à chaque démarrage (ou pour être plus précis, à chaque fois qu'une interface réseau est mise en place - que ce soit à partir d'un arrêt, d'une mise en veille ou d'une mise en veille prolongée). En fonction de votre temps de disponibilité, il est sûr de dire qu'il n'a pas été synchronisé depuis plus d'une semaine. Et votre horloge système fonctionne un peu rapidement pour une raison quelconque.

- Configurez une crontâche horaire à synchroniser si vous ne redémarrez pas souvent ou si votre serveur / bureau ne se met jamais en veille

Votre meilleur pari est de mettre en place un cron-job, je dirais toutes les heures si vous voulez du temps super précis. La façon la plus simple de le faire est:

  • sudo editor /etc/cron.hourly/ntpsync

Ajoutez les lignes suivantes:

#! / bin / bash

ntpdate ntp.ubuntu.com #ou votre choix de serveur
  • enregistrer, quitter et sudo chmod +x /etc/cron.hourly/ntpsync

Vous pouvez le mettre à la /etc/cron.dailyplace si vous le souhaitez, une fois par jour.

ish
la source
Repérez. J'accepte cela pour avoir répondu correctement à ma question de savoir pourquoi l'horloge est incorrecte, mais je suis sceptique quant à cette solution de contournement. Je vais devoir en apprendre un peu plus à ce sujet avant de décider des mesures à prendre.
ændrük
Si vous définissez le serveur de votre choix dans le fichier ntp.conf, devez-vous le redéfinir ici?
Snekse
6

Cela peut se produire si vous avez installé le démon de temps ntp et que l'heure sur votre machine est trop éloignée pour être corrigée rapidement.

Pour le réparer, ouvrez un terminal et faites

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

Ce que cela fait:

  1. Arrêter le démon ntp
  2. Réglage de l'horloge
  3. Le temps devrait être venu
  4. redémarrer le démon ntp

Si vous n'avez pas installé ntp, faites-le avec

  sudo apt-get install update

Mise à jour: L'utilisation de ntpdate dans un travail cron, comme cela a été recommandé ici, conduit à des problèmes subtils.

Le ntpdate fera «sauter» l'heure toutes les heures environ. L'utilisation de ntp évite ce problème, car il ajustera l'heure en décalant l'horloge. De plus, bien que la sélection d'un serveur ntp dans le quartier donne une précision encore plus élevée, ce n'est pas nécessaire. Le fichier de configuration ntp par défaut contient plusieurs serveurs et le serveur compense automatiquement tout retard.

Conclusion: - utilisez ntp - si vous êtes loin, arrêtez ntp, exécutez ntpdate une fois et redémarrez ntp.

Floyd
la source
/etc/init.d/ntpn'existe pas. Il s'agit d'une installation assez récente d'Ubuntu 12.04 et je n'ai délibérément rien changé au temps.
ændrük
Ensuite, je recommande de l'installer.
Floyd
Autant que possible, je préfère ne pas me mêler de la configuration et des services à l'échelle du système. Si ce fichier n'est pas installé par défaut, pourquoi devrait-il être nécessaire que les paramètres d'heure et de date par défaut fonctionnent?
ændrük
1
L'heure est-elle correcte après un redémarrage? Je soupçonne que la mise à jour de l'horloge ne s'exécute qu'une seule fois. Certains systèmes ont le problème que l'horloge système maintenue par Linux fonctionne beaucoup trop rapidement. Je l'ai eu en particulier avec des systèmes fonctionnant comme des machines virtuelles.
Floyd
1
Si ce problème persiste après le redémarrage ou l'arrêt, il se peut que votre cellule CMOS soit morte dans MOBO.
atenz
1

J'ai eu un problème similaire et il a été causé par quelque chose dans le pare-feu. À la fin, j'ai ajouté le travail cron horaire mais j'ai ajouté le-u argument pour ntpdatequ'il utilise un port standard non.

Mon problème était dû au fait qu'Ubuntu ne vérifiait pas réellement si cela ntpdatefonctionnait mais supposait automatiquement que cela fonctionnerait.

Axel
la source