10.14 Мохаве
Мохаве все еще использует timed
, но ntpdate
и помощники ntpq
удалены. Чтобы проверить и обновить системное время, вы можете позвонить sntp
напрямую.
$ 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
Из коробки отсутствует файл отслеживания, поэтому, если вы получаете эту безобидную ошибку при проверке времени:
kod_init_kod_db(): Cannot open KoD db file /var/db/ntp-kod: No such file or directory
либо проигнорируйте ошибку, либо попробуйте создать этот пустой файл:
sudo touch /var/db/ntp-kod
sudo chmod 666 /var/db/ntp-kod
10.13 Высокая Сьерра
High Sierra использует timed
, от /usr/libexec/timed
пользователя системы _timed
.
Timed поддерживает точность системных часов, синхронизируя часы с эталонными часами с помощью таких технологий, как NTP. Входы объединяются в timed, где он вычисляет неопределенность, чтобы упростить планирование активных временных заданий. Timed также знает о состоянии питания / батареи.
время управляется LaunchDaemon /System/Library/LaunchDaemons/com.apple.timed.plist
. по времени бежит ...
- когда демон загружается при загрузке (RunAtLoad: true)
- каждые 3600 секунд (StartInterval: 3600)
- когда режим полета отключен (com.apple.systemconfiguration изменен режим полета самолета: com.apple.radios.plist Значение false параметра AirplaneMode, которое, как представляется, переносится из iOS)
Вы можете увидеть, как «выключены» ваши часы, посмотрев на содержимое /var/db/timed/com.apple.timed.plist
словаря TMLastSystemTime в ключе TMTimeError и ключе 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 использует установленный сервер времени /etc/ntp.conf
, который по умолчанию
server time.apple.com
timed также использует TMTimeSynthesizer, который CoreTime на iOS использует для обновления часов, но я не знаю его истории на macOS:
Не запускайте синхронизируемый двоичный файл самостоятельно, как упомянуто на странице руководства:
timed не принимает аргументов, и пользователи не должны запускать его вручную.
Согласно сообщению пользователя Apple Developer Forums granada29 в посте ntpd, timed и chronyd в 10.13 , timed выполняет следующее:
timed выглядит как простой sntp-клиент - т.е. он периодически опрашивает NTP (15 минут) и использует системный вызов settimeofday () для установки часов системы. Я предполагаю, что у этого есть некоторый ум, чтобы избежать перевести часы назад, но нет никакого способа сказать.
10,11 Эль-Капитан до 10,12 Сьерра
pacemaker
это демон, отвечающий за управление временем в macOS. Он использует adjtime
для настройки часов в соответствии с содержанием /var/db/ntp.drift
.
Вы можете увидеть, насколько «выключены» ваши часы, посмотрев на содержимое ntp.drift
- например, мой файл содержит следующее:
-23.640
Это означает, что часы находятся на -23,64 PPM от времени, которое они должны быть. Единицами этого числа являются ППМ или Части на миллион. 1 стр. / Мин составляет 1 мкс / с или 3,6 мс / ч.
Вы можете сделать обновление тактового чаще работает pacemaker
с -a
опцией, обеспечивая время в секундах ожидание между движениями времени:
/usr/libexec/pacemaker -a 10
Чтобы увидеть параметры, используемые OS X для кардиостимулятора, откройте /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" );
}
Чтобы найти текущие настройки, запустите с -i
параметром:
/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
Вы можете показать журнал, запустив с -v
опцией:
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
работала. Интересно,/var/db/ntp-kod
не вызывает ли ошибка проблемы с автоматической синхронизацией - попробую создать ее и проверить через несколько месяцев. =)