Comment savoir si mon Mac maintient correctement l'horloge à jour?

45

Je voudrais savoir quels sont les paramètres par défaut pour OS X en termes de maintien de l'horloge ajustée lorsque j'active la synchronisation automatique de l'heure dans la préférence Date et heure.

Je sais que le vénérable ntpddémon sur Mavericks (10.9) et Yosemite (10.10) n'est plus responsable de l'ajustement de l'heure et à la place un nouveau programme pacemakera été introduit - alors comment puis-je savoir que les choses fonctionnent ou doivent être ajustées pour garder l'heure?

bmike
la source

Réponses:

71

10.14 Mojave

Mojave utilise toujours timed, mais ntpdateet les assistants ntpqsont supprimés. Pour vérifier et mettre à jour l'heure de votre système, vous pouvez appeler sntpdirectement.

$ sudo sntp -sS pool.ntp.org
Password:
sntp [email protected] Tue Mar 21 14:36:42 UTC 2017 (136.200.1~2533)
2018-09-29 19:42:41.448103 (-0200) +1087.742403 +/- 725.183462 pool.ntp.org 188.68.36.203 s2 no-leap

Hors de la boîte, un fichier de suivi est manquant, donc si vous obtenez cette erreur inoffensive lors de la vérification de l'heure:

kod_init_kod_db(): Cannot open KoD db file /var/db/ntp-kod: No such file or directory

ignorez l'erreur ou essayez de créer ce fichier vide:

sudo touch /var/db/ntp-kod
sudo chmod 666 /var/db/ntp-kod

10.13 High Sierra

High Sierra utilise timed, depuis /usr/libexec/timed, géré par l'utilisateur du système _timed.

timed maintient la précision de l'horloge du système en synchronisant l'horloge avec les horloges de référence via des technologies comme NTP. Les entrées sont fusionnées à l'intérieur de temporisé, où il calcule l'incertitude pour faciliter la planification des tâches horaires proactives. timed est également au courant des conditions d'alimentation / de la batterie.

timed est géré par LaunchDaemon /System/Library/LaunchDaemons/com.apple.timed.plist. courses chronométrées…

  • lorsque le démon est chargé au démarrage (RunAtLoad: true)
  • toutes les 3600 secondes (StartInterval: 3600)
  • lorsque le mode avion est désactivé (mode avion com.apple.systemconfiguration modifié: com.apple.radios.plist AirplaneMode false, qui semble être transféré depuis iOS)

Vous pouvez voir l'état de votre horloge en regardant le contenu de /var/db/timed/com.apple.timed.plist, sous le dictionnaire TMLastSystemTime dans la clé TMTimeError et la clé TMScaleFactorError.

$ sudo defaults read /var/db/timed/com.apple.timed TMLastSystemTime
{
    TMCurrentTime = "537303485.281592";
    TMReliability = 1;
    TMRtcTime = "351422.381868388";
    TMScaleFactor = "0.9999958233107684";
    TMScaleFactorError = "3.468751755688052e-05";
    TMSource = TMTimeSynthesizer;
    TMTimeError = "0.6127951619022057";
}

Capture d'écran Xcode du plist mentionné

timed utilise le serveur de temps défini dans /etc/ntp.conf, qui est par défaut

server time.apple.com

timed utilise également TMTimeSynthesizer, quelque chose que CoreTime sur iOS utilise pour mettre à jour l'horloge, mais je ne connais pas son historique sur macOS:

Sources chronométrées

Ne lancez pas vous-même le binaire chronométré, comme mentionné dans la page de manuel:

timed ne prend aucun argument et les utilisateurs ne doivent pas le lancer manuellement.

Selon l'utilisateur des forums des développeurs Apple granada29 dans le post ntpd, timed et chronyd en 10.13 , timed effectue les opérations suivantes:

timed semble être un simple client sntp - c'est-à-dire qu'il interroge le NTP périodiquement (15 minutes) et utilise l'appel système settimeofday () pour régler l'horloge du système. Je suppose qu'il a une certaine intelligence pour éviter de reculer, mais il n'y a aucun moyen de le savoir.

10.11 El Capitan à 10.12 Sierra

pacemakerest le démon responsable de la gestion de l'heure sous macOS. Il permet adjtimed'ajuster l'horloge en fonction du contenu de /var/db/ntp.drift.

Vous pouvez voir à quel point votre horloge est éteinte en regardant le contenu de ntp.drift- par exemple, mon fichier contient les éléments suivants:

-23.640

Cela signifie que l'horloge est à -23,64 PPM de l'heure qu'elle devrait être. Les unités de ce nombre sont PPM ou Parts Per Million. 1 PPM correspond à 1 microseconde / seconde ou 3,6 ms / h.

Vous pouvez effectuer la mise à jour de l'horloge plus souvent en exécutant pacemakerl' -aoption, en fournissant un temps d'attente en secondes entre les mouvements de temps:

/usr/libexec/pacemaker -a 10

Pour voir les paramètres utilisés par OS X pour stimulateur cardiaque, ouvrez /System/Library/LaunchDaemons/com.apple.pacemaker.plist.

{
    KeepAlive = { PathState = { "/private/var/db/ntp.drift" = :true; }; };
    Label = "com.apple.pacemaker";
    ProgramArguments = ( "/usr/libexec/pacemaker", "-b", "-e", "0.0001", "-a", "10" );
}

Pour trouver vos paramètres actuels, exécutez l' -ioption:

/usr/libexec/pacemaker -i
Jan 19 18:20:08 g pacemaker[12544] <Info>: --- settings for external power ---
Jan 19 18:20:08 g pacemaker[12544] <Info>: interval = 1 seconds, tolerance = 0.000000, drift = -23.640000
Jan 19 18:20:08 g pacemaker[12544] <Info>: --- settings for internal power ---
Jan 19 18:20:08 g pacemaker[12544] <Info>: interval = 1 seconds, tolerance = 0.000024, drift = -23.640000

Vous pouvez afficher le journal en exécutant avec l' -voption:

sudo /usr/libexec/pacemaker -v
Password:
Jan 19 18:23:17 g pacemaker[13202] <Info>: power status check: using external power
Jan 19 18:23:17 g pacemaker[13202] <Info>: created file monitor for /var/db/ntp.drift
Jan 19 18:23:17 g pacemaker[13202] <Info>: interval = 1 seconds, tolerance = 0.000000, drift = -23.640000
Jan 19 18:23:19 g pacemaker[13202] <Debug>: drift -23.640000 residue 0.000000 delta -23
Jan 19 18:23:20 g pacemaker[13202] <Debug>: drift -23.640000 residue -0.640000 delta -24
Jan 19 18:23:21 g pacemaker[13202] <Debug>: drift -23.640000 residue -0.280000 delta -23
Jan 19 18:23:22 g pacemaker[13202] <Debug>: drift -23.640000 residue -0.920000 delta -24
Jan 19 18:23:23 g pacemaker[13202] <Debug>: drift -23.640000 residue -0.560000 delta -24
Jan 19 18:23:24 g pacemaker[13202] <Debug>: drift -23.640000 residue -0.200000 delta -23
⌃C%
grg
la source
Mon système Mojave ne se synchronisait pas automatiquement, mais sntpfonctionnait. Je me demande si l' /var/db/ntp-koderreur cause des problèmes avec la synchronisation automatique - j'essaierai de la créer et reviendra dans quelques mois. =)
Ken Williams
5

Cette réponse ne s'applique qu'à 10.12 Sierra et inférieur.

Les détails peuvent être utiles pour référence, mais une autre réponse couvre parfaitement les nouveaux détails de chronométrage macOS.


La première étape consiste à voir si votre temps est configuré.

Mac:~ me$ ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*time.apple.com  17.168.198.149   2 u 1046  512   37   58.475    9.477   3.674

En supposant que vous avez des valeurs de délai / décalage / gigue inférieures à 100 (le délai peut être inférieur à 1000 dans des situations normales pour des systèmes critiques moins précis), la prochaine commande à exécuter dans le terminal est ntpqsuivie par le serveur de temps de votre ntpqpréférence système et. Vous pouvez également tester d'autres serveurs de temps pour voir s'ils ont des retards inférieurs car le système de chronométrage aime avoir une réponse rapide et proche des serveurs de temps lors de la correction de l'heure pour les différences de millisecondes et du calcul de la façon dont l'horloge matérielle actuelle s'éloigne de l'heure standard .

Mac:~ me$ ntpdate -q time.apple.com
server 17.151.16.12, stratum 2, offset 0.081698, delay 0.11237
server 17.151.16.20, stratum 2, offset 0.081365, delay 0.11310
server 17.151.16.21, stratum 2, offset 0.082754, delay 0.11440
server 17.151.16.22, stratum 2, offset 0.081750, delay 0.11264
server 17.151.16.23, stratum 2, offset 0.082691, delay 0.11415
server 17.151.16.38, stratum 2, offset 0.082077, delay 0.11458
server 17.171.4.13, stratum 2, offset 0.084822, delay 0.08054
server 17.171.4.14, stratum 2, offset 0.083749, delay 0.08142
server 17.171.4.15, stratum 2, offset 0.086343, delay 0.07605
server 17.171.4.33, stratum 2, offset 0.086526, delay 0.07690
server 17.171.4.34, stratum 2, offset 0.084500, delay 0.07997
server 17.171.4.35, stratum 2, offset 0.083987, delay 0.08278
server 17.171.4.36, stratum 2, offset 0.084382, delay 0.08028
server 17.171.4.37, stratum 2, offset 0.085948, delay 0.07831
server 17.151.16.14, stratum 2, offset 0.082043, delay 0.11270
19 Jan 12:09:32 ntpdate[4592]: adjust time server 17.171.4.15 offset 0.086343 sec
Mac:~ me$ ntpq
ntpq> assoc

ind assid status  conf reach auth condition  last_event cnt
===========================================================
  1 57788  9014   yes   yes  none    reject   reachable  1
ntpq> peer
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 time.apple.com  17.168.198.148   2 u  729  512    1  133.274   51.653 371.362
ntpq> q

La prochaine chose à vérifier est votre programme de stimulateur cardiaque:

Mac:~ me$ ps -ef|grep [p]acemaker
0    76     1   0 Fri08AM ??         0:03.64 /usr/libexec/pacemaker -b -e 0.0001 -a 10

Cela montre que sur batterie, l'intervalle de réglage n'est pas supérieur à une fois toutes les 10 secondes et s'ajuste encore moins si l'erreur d'horloge est inférieure à 0,1 milliseconde.

Si vous constatez que votre décalage est de quelques secondes ou plus, vous souhaiterez peut-être modifier les serveurs de temps que vous utilisez ou peut-être modifier les valeurs utilisées sur le stimulateur cardiaque pour utiliser plus d'énergie et de CPU, mais avoir une horloge plus proche de l'heure réelle en échange des paramètres qu'Apple a livré avec 10.9.

bmike
la source
4

Si vous allez sur http://time.gov, vous pouvez voir l'heure officielle (jusqu'à la seconde) et l'utiliser pour vérifier si l'heure de votre système est correcte ou non. Notez qu'il s'agit de l'heure officielle du NIST et effectue sa propre synchronisation dans le navigateur, indépendamment de l'heure du système (à titre d'exemple, vous pouvez voir ici que time.gov gère les secondes intercalaires, contrairement à OS X, apparemment).

asmeurer
la source
Pourriez-vous expliquer comment cela affecte mon choix d'utiliser "garder l'horloge synchronisée", je suppose que c'est une aussi bonne réponse que "vérifier votre Apple Watch - elle est précise jusqu'à la seconde".
bmike
1
La question est "comment puis-je savoir si mon Mac maintient correctement l'horloge à jour?" Si "regarder l'heure officielle" ne répond pas à votre question, vous devriez probablement la reformuler.
asmeurer
En ce qui concerne time.gov, il s'agit de l' heure officielle du NIST et effectue sa propre synchronisation dans le navigateur lorsque vous visitez la page. Dire «vérifier une Apple Watch» reviendrait à simplement vous dire que l'horloge de votre système OS X est déjà synchronisée par défaut (ce qui est vrai, mais ne répond pas vraiment à la question). C'est également beaucoup moins cher qu'une Apple Watch, et l'Apple Watch n'a pas de deuxième affichage numérique AFAIK.
asmeurer
Ma supposition était que la montre a plus d'ingénierie pour garder l'heure exacte et précise. Les horloges Mac sont notoirement trop précises et insuffisamment précises. Il en va de même pour tout ordinateur que je connais - la précision est difficile pour le chronométrage. +1 pour l'explication détaillée des fonctionnalités Web. (Même si ce n'est pas dans le corps de la réponse)
bmike
4

À partir de High Sierra, le démon système ntpd a été remplacé par le démon système temporisé qui appelle / usr / libexec / timed.

Le meilleur exécutable que j'ai trouvé pour obtenir des détails est systemsetup(exécuté en tant que root) avec ses différents drapeaux:

[-getusingnetworktime] [-setusingnetworktime on | off]
[-getnetworktimeserver] [-setnetworktimeserver timeserver]

La sortie résultante est de loin moins verbeuse (= ennuyeuse). Par exemple, aucun détail ∂T / dérive.

Apparemment, la temporisation utilise un seul serveur ntp (le premier répertorié - vérifié avec WireShark / LittleSnitch) même si plusieurs sont entrés dans le fichier préférences système / ntp.conf.

Lectures complémentaires (pas très techniques): Quelqu'un a-t-il le temps? Comment High Sierra a changé la synchronisation de l'heure


Un démon ntpd hérité est toujours présent mais déchargé. Il peut être chargé cependant en entrant dans Terminal.app:

sudo launchctl load [-F|-w] /System/Library/LaunchDaemons/org.ntp.ntpd-legacy.plist

en mode SIP désactivé. La saisie ntpq -pfonctionnera alors à nouveau.

Pour charger le démon en mode activé SIP, copiez le fichier dans / Library / LaunchDaemons /:

sudo cp /System/Library/LaunchDaemons/org.ntp.ntpd-legacy.plist /Library/LaunchDaemons/org.ntp.ntpd.plist

Modifiez le libellé du plist avec nano ou un autre éditeur de org.ntp.ntpd-legacy à org.ntp.ntpd:

sudo nano /Library/LaunchDaemons/org.ntp.ntpd.plist

Chargez le démon:

sudo launchctl load -w /Library/LaunchDaemons/org.ntp.ntpd.plist

Si je trouve un meilleur exécutable pour obtenir les détails de l'heure avec le démon High Sierra par défaut, la réponse sera mise à jour.

klanomath
la source
1
L'astuce avec l'activation de l'ancien ntpd n'est pas une bonne option lors de l'utilisation de High Sierra, car /System/Library/LaunchDaemons/org.ntp.ntpd-legacy.plist est désactivé et "sécurisé" avec SIP. Donc, si vous ne voulez pas le charger, vous devez d'abord désactiver SIP. (/ usr / bin / csrutil désactivé)
Juergen Braendle
2

Pour obtenir une réponse fiable sur la façon dont votre horloge est réglée, exécutez ntpdate en mode débogage:

ntpdate -d pool.ntp.org

Cela tournera pendant un certain temps et se terminera par une ligne telle que

 1 Apr 17:38:16 ntpdate[4711]: adjust time server 123.45.67.89 offset 0.000810 sec

Dans ce cas, cela signifiait que mon horloge locale était éteinte d'environ 810 µs (ce qui serait spectaculaire, si en fait vrai, mais la valeur bien en dessous de 100 ms indique une synchronisation de travail).

cabo
la source
1

Pour vérifier la synchronisation d'horloge, similaire à la réponse qui suggère de s'exécuter ntpdateen mode débogage, vous pouvez également l'exécuter en mode requête pour une sortie moins détaillée.

$ ntpdate -q pool.ntp.org
server 85.199.214.102, stratum 1, offset 0.006256, delay 0.05470
server 95.215.175.2, stratum 3, offset 0.005234, delay 0.05624
server 217.114.59.3, stratum 2, offset 0.007166, delay 0.06274
server 85.199.214.100, stratum 1, offset 0.006319, delay 0.05396
22 Jun 09:20:55 ntpdate[84112]: adjust time server 85.199.214.100 offset 0.006319 sec
$

Cela vient de mon Mac exécutant High Sierra 10.13.2, qui fonctionne timedplutôt que le démon NTP ( ntpdatefonctionne toujours car il n'utilise pas le démon NTP).

JungleMartin
la source