10.14 Mojave
Mojave nadal korzysta timed
, ale ntpdate
pomocnicy ntpq
zostali usunięci. Aby sprawdzić i zaktualizować czas systemowy, możesz zadzwonić sntp
bezpośrednio.
$ sudo sntp -sS pool.ntp.org
Password:
sntp 4.2.8p10@1.3728-o 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
Po wyjęciu z pudełka brakuje pliku śledzenia, więc jeśli pojawi się ten nieszkodliwy błąd podczas sprawdzania czasu:
kod_init_kod_db(): Cannot open KoD db file /var/db/ntp-kod: No such file or directory
zignoruj błąd lub spróbuj utworzyć ten pusty plik:
sudo touch /var/db/ntp-kod
sudo chmod 666 /var/db/ntp-kod
10.13 High Sierra
High Sierra korzysta timed
z /usr/libexec/timed
, prowadzonego przez użytkownika systemu _timed
.
timed utrzymuje dokładność zegara systemowego poprzez synchronizację zegara z zegarami odniesienia za pomocą technologii takich jak NTP. Dane wejściowe są scalane w ramach czasowych, gdzie oblicza niepewność, aby ułatwić planowanie zadań w czasie proaktywnym. timed jest również świadomy stanu zasilania / akumulatora.
timed jest zarządzany przez LaunchDaemon /System/Library/LaunchDaemons/com.apple.timed.plist
. biegi czasowe…
- gdy demon jest ładowany podczas rozruchu (RunAtLoad: true)
- co 3600 sekund (StartInterval: 3600)
- gdy Tryb samolotowy jest wyłączony (zmieniono tryb samolotowy konfiguracji com.apple.system: com.apple.radios.plist Tryb samolotowy false, który wydaje się być przeniesiony z iOS)
Możesz zobaczyć, jak „wyłączony” jest Twój zegar, patrząc na zawartość /var/db/timed/com.apple.timed.plist
słownika TMLastSystemTime w kluczu TMTimeError i kluczu 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";
}
timed korzysta z ustawionego serwera czasu /etc/ntp.conf
, którym jest domyślnie
server time.apple.com
timed używa również TMTimeSynthesizer, czegoś, co CoreTime na iOS używa do aktualizacji zegara, ale nie jestem świadomy jego historii na macOS:
Nie uruchamiaj binarnego timera sam, jak wspomniano na stronie podręcznika:
timed nie przyjmuje żadnych argumentów, a użytkownicy nie powinni uruchamiać go ręcznie.
Według użytkowników forów programistów Apple granada29 w poście ntpd, chronometraż i chronyd w 10.13 , timed wykonuje następujące czynności:
timed wydaje się być prostym klientem sntp - tj. okresowo sonduje NTP (15 minut) i używa wywołania systemowego settimeofday () do ustawienia zegara systemowego. Zakładam, że jest trochę sprytny, aby uniknąć cofania zegara do tyłu, ale nie ma sposobu, aby powiedzieć.
10.11 El Capitan do 10.12 Sierra
pacemaker
jest demonem odpowiedzialnym za zarządzanie czasem w macOS. Służy adjtime
do dostosowania zegara do zawartości /var/db/ntp.drift
.
Możesz zobaczyć, jak „wyłączony” jest Twój zegar, patrząc na zawartość ntp.drift
- na przykład mój plik zawiera następujące elementy:
-23.640
Oznacza to, że zegar jest o -23.64 PPM od czasu, który powinien być. Jednostkami tej liczby są PPM lub części na milion. 1 PPM to 1 mikrosekunda / sekundę lub 3,6 ms / h.
Możesz częściej aktualizować zegar, uruchamiając pacemaker
tę -a
opcję, zapewniając w sekundach czas oczekiwania między ruchami czasu:
/usr/libexec/pacemaker -a 10
Aby zobaczyć parametry używane przez OS X dla stymulatora serca, otwórz /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" );
}
Aby znaleźć bieżące ustawienia, uruchom z -i
opcją:
/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
Możesz wyświetlić dziennik, uruchamiając z -v
opcją:
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%
sntp
działa. Zastanawiam się, czy/var/db/ntp-kod
błąd nie powoduje problemów z automatyczną synchronizacją - spróbuję go utworzyć i sprawdzi za kilka miesięcy. =)