Comment le temps est-il conservé sur le Raspberry Pi?

17

Comment le temps est-il conservé sur un Raspberry Pi avec la dernière version de Raspbian? Qu'est-ce qui définit l'horloge interne d'un serveur NTP? Que se passe-t-il quand aucun serveur NTP n'est disponible?

À partir de mon programme, j'essaie de déterminer si l'heure a été réglée à partir de NTP et je demande à l'utilisateur de la régler si ce n'est pas le cas.

Gars
la source
4
Si time.now <than year 2010 - then time is not set. Vous n'avez besoin de rien savoir d'autre. Le temps n'est pas économisé lors des coupures de courant et sera de 1970 selon les spécifications UNIX / POSIX. Pour savoir si l'heure est inexacte, vous devez interroger NTP et comparer l'heure locale. Vous ne pouvez pas déterminer si le temps n'est pas synchronisé sans demander à un serveur de temps.
Piotr Kula
4
si time.now <2010 ne fonctionnera pas car le RPi définit l'heure actuelle à partir de sa dernière heure d'arrêt. C'est pourquoi je veux savoir comment l'heure est réglée pour pouvoir désactiver ce comportement si nécessaire.
Guy
citrouille - comment cette question est-elle liée à la dérive de l'horloge interne?
Guy
1
Peut-être que le titre de cette question devrait être plus précis pour éviter le chevauchement entre ces questions.
XTL

Réponses:

22

Raspbian dispose de deux solutions logicielles de chronométrage. Étant donné que NTP nécessite une connexion réseau et qu'il est tout à fait inutile si votre Raspberry Pi n'est pas connecté au réseau, il utilise également une fausse horloge . Il enregistre l'horloge actuelle périodiquement et la charge au démarrage.

pi@raspberrypi ~ $ cat /etc/fake-hwclock.data 
2012-08-15 03:17:01

Ce n'est pas trop précis, mais cela éliminera le problème du temps qui revient à 1970 après chaque redémarrage.

asalamon74
la source
Bonne conjecture Jivings! :-)
Piotr Kula
@ asalamon74: pouvez-vous ajouter comment désactiver fake-hwclock ou faudrait-il le désinstaller?
Guy
2

Vous pouvez enregistrer des statistiques NTP, puis analyser les journaux de votre programme.

Les paramètres du démon NTP sont stockés dans un fichier /etc/ntp.conf. Décommentez la ligne avec la directive statsdirpour activer la journalisation des statistiques NTP. Assurez-vous que le répertoire référencé existe et est accessible en écriture pour l'utilisateur ntpd.

Dawid Ferenczy Rogožan
la source
1

Pour vérifier si l'heure a été définie par un serveur NTP, vous pouvez essayer d'utiliser ntpq -p, vous obtiendrez quelque chose comme ceci *:

$ ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*223.212.138.2    .MRS.           1 u  424  512  377    4.080   -4.551  21.857
+ts0.tttsc.nvm.e  .GPS.           1 u  387  512  363    1.304   -7.563  28.405
+218.89.10.3      217.13.17.82    2 u  334  512  377    1.853   -4.562  19.474

La «portée» sera> 0 dans une certaine ligne si le serveur NTP a été atteint et ainsi régler l'heure. C'est un octal glissant de 8 bits soit 0,1,3,7,17,37,77,177,377

Ou ceci - vous pourriez grep 'stratum' <16 ou sync_ntp (ce n'est pas sur RPi évidemment)

$ ntpq -c rl
associd=0 status=0615 leap_none, sync_ntp, 1 event, clock_sync,
version="ntpd [email protected] Mon Jul 18 09:22:49 UTC 2013 (1)",
processor="x86_64", system="Linux/2.6.32-431.29.2.el6.x86_64", leap=00,
stratum=4, precision=-21, rootdelay=40.242, rootdisp=315.102,
refid=192.168.1.123,
reftime=d82131cd.fbb96c5e  Thu, Nov 27 2014 13:14:53.983,
clock=d82138e6.fd03bdd1  Thu, Nov 27 2014 13:45:10.988, peer=61770, tc=9,
mintc=3, offset=5.214, frequency=52.475, sys_jitter=12.217,
clk_jitter=23.319, clk_wander=1.373
$

Alternativement (je pense que ntpstat n'est pas disponible immédiatement sur RPi)

$ ntpstat
synchronised to NTP server (192.168.1.123) at stratum 4
   time correct to within 310 ms
   polling server every 512 s

et utilisez les codes de sortie aussi expliqués ici http://www.cyberciti.biz/faq/linux-unix-bsd-is-ntp-client-working/ certes pas spécifiques à RPi ...

* Les adresses des serveurs horaires ne sont pas réelles

xcxc
la source
-1

Le chronométrage est entièrement logiciel. Sans utiliser NTP, il n'y a pas de chronométrage.

Si vous voulez vérifier si l'horloge a été réglée, utilisez simplement datepour voir si elle montre l'époque Unix, ce à quoi le Pi sera par défaut.

Jivings
la source
2
Incorrect. Le RPi définit l'heure actuelle à partir de sa dernière heure d'arrêt lorsqu'il n'y a pas de connexion réseau. L'horloge est donc toujours une heure aléatoire antérieure à l'heure correcte, pas nécessairement l'époque Unix.
Guy
2
Ce n'est certainement pas vrai sur mon Pi. Si je le démarre sans connexion réseau, le moment est venu. Je peux voir ça maintenant.
Jivings
2
Cela dépend probablement de la distribution.
Alex Chamberlain
1
@AlexChamberlain Semble une étrange différence.
Jivings
1
@Jivings S'il existe un logiciel appelé sur Raspbian fake-hwclock, il ne sera probablement pas sur Arch. Sonne comme le genre de peluches qu'Arch ignore.
Alex Chamberlain