Ich glaube , Sie wollen clock_gettime
mit CLOCK_TAI
richtig arbeiten. Ich habe das auch so gemacht.
Der kritische Satz in der Antwort, auf die verwiesen wird, lautet: "Bitte beachten Sie, dass der Offset von CLOCK_REALTIME beim Booten auf Null initialisiert wird und weder ntpd noch chronyd ihn standardmäßig auf den korrekten Wert setzen (derzeit 35)."
Dies mag immer noch zutreffen, abgesehen davon, dass der Versatz jetzt 37 ist, aber ein aktueller ntpd kann zumindest so konfiguriert werden, dass der Versatz eingestellt wird. Auf einem openSUSE-Computer habe ich Folgendes ausgeführt:
vi /etc/ntp.conf # Add the line: leapfile /var/lib/ntp/etc/ntp.leapseconds
update-leap
service ntpd restart
less /var/log/ntp # Check for errors
Dann clock_gettime(CLOCK_TAI, &res)
schien es richtig zu funktionieren.
Ich denke, dass NTP den Offset ntp_adjtime
mit setzt MOD_TAI
. Beim Durchsuchen der Chronikquelle wurden grep -P '(ADJ|MOD)_TAI'
keine Übereinstimmungen gefunden, sodass Chronik anscheinend noch nicht über diese Funktion verfügt.
Edmund Grimley Evans
quelle
CLOCK_TAI
.Da ich
chrony
anstelle des alten laufentpd
, hatte ich keine automatisierte Methode, um den Kernel-Parameter richtig zu machen, und suchte nach einer Alternative.Da der Versatz zwischen TAI und UTC relativ konstant ist (Änderungen <einmal pro Jahr), kann der Kernel-Parameter statisch festgelegt werden, und die Verwendung der CLOCK_TAI-Uhr in einer Anwendung liefert den korrekten Wert.
Es gibt eine Testanwendung zum Einstellen des Kernel-Offsets in den Kernel-Quellen, in
tools/testing/selftests/timers/set-tai.c
. Und wenn Sie dastzdata
Paket installiert haben, gibt es eine Datei mit dem Offset zwischen UTC und TAI in/usr/share/zoneinfo/leap-seconds.list
.Ich habe die Kernel-Testanwendung heruntergefahren, sodass die Hauptanwendung wie folgt aussah:
In meinem Anwendungsfall ging es nur darum, den richtigen Wert aus der
leap-seconds.list
Datei zu extrahieren undset-tai
mit diesem Parameter auszuführen (/etc/rc.local
damit dies beim Booten geschieht). Ein Beispiel dafür ist:Hoffe das ist nützlich für jemand anderen!
quelle