Как я могу узнать, правильно ли обновляет часы мой Mac?


45

Я хотел бы знать, каковы настройки по умолчанию для OS X с точки зрения поддержания часов, настроенных, когда я включаю автоматическую синхронизацию времени в предпочтении Дата и время.

Я знаю, что почтенный ntpdдемон Mavericks (10.9) и Yosemite (10.10) больше не отвечает за настройку времени, и вместо этого была введена новая программа pacemaker- так как я могу знать, что все работает или нуждается в настройке, чтобы сохранить время?

Ответы:


71

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";
}

Xcode скриншот упомянутого plist

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%

Моя система Mojave не синхронизировалась автоматически, но sntpработала. Интересно, /var/db/ntp-kodне вызывает ли ошибка проблемы с автоматической синхронизацией - попробую создать ее и проверить через несколько месяцев. =)
Кен Уильямс

5

Этот ответ относится только к 10.12 Сьерра и ниже.

Подробности могут быть полезны для справки, но другой ответ превосходно описывает новые детали хронометража macOS.


Первый шаг - посмотреть, настроено ли ваше время.

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

Предполагая, что у вас есть значения задержки / смещения / дрожания меньше 100 (задержка может быть меньше 1000 в обычных ситуациях для систем с меньшей точностью по времени), следующая команда для запуска в терминале ntpqсопровождается сервером времени из вашей ntpqи системных настроек. Вы также можете протестировать другие серверы времени, чтобы увидеть, имеют ли они меньшие задержки, поскольку система хронометража предпочитает иметь быстрый и быстрый ответ от серверов времени при корректировке времени для различий в миллисекундах и вычислении отклонения текущих аппаратных часов от стандартного времени. ,

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

Следующее, что нужно проверить, это ваша программа кардиостимулятора:

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

Это показывает, что на батарее интервал регулировки составляет не более одного раза в 10 секунд, а регулировка еще меньше, если ошибка синхронизации составляет менее 0,1 миллисекунды.

Если вы обнаружите, что ваше смещение составляет секунды или более, вы можете изменить используемые вами серверы времени или, возможно, изменить значения, используемые в кардиостимуляторе, чтобы использовать больше энергии и ЦП, но иметь часы ближе к истинному времени в обмен на настройки, которые есть у Apple. поставляется с 10,9.


4

Если вы зайдете на http://time.gov, вы сможете увидеть официальное время (с точностью до секунды) и использовать его для проверки правильности системного времени. Обратите внимание, что это официальное время NIST, и оно выполняет свою собственную синхронизацию в браузере, независимо от системного времени (в качестве примера вы можете увидеть здесь, что time.gov обрабатывает дополнительные секунды, тогда как OS X, по-видимому, этого не делает).


Не могли бы вы пояснить, как это влияет на мой выбор использовать «синхронизировать часы»? Полагаю, это такой же хороший ответ, как и «проверьте свои Apple Watch - с точностью до секунды».
bmike

1
Вопрос в том, как мне узнать, правильно ли обновляет мой Mac мои часы? Если «посмотрите официальное время» не отвечает на ваш вопрос, вам, вероятно, следует перефразировать его.
asmeurer

Что касается time.gov, это официальное время NIST, и он выполняет собственную синхронизацию в браузере, когда вы посещаете страницу. Сказать «проверь Apple Watch» - это то же самое, что сказать, что системные часы OS X уже синхронизированы по умолчанию (что правда, но на самом деле не отвечает на вопрос). Это также намного дешевле, чем Apple Watch, и у Apple Watch нет второго цифрового дисплея AFAIK.
asmeurer

Я предположил, что у часов больше техники, чтобы время было точным и точным. Часы Mac, как известно, более точные и недостаточно точные. То же самое относится и к любому компьютеру, о котором я знаю, - точность трудно вести по времени. +1 за подробное объяснение веб-функций. (Даже если это не в теле ответа)
bmike

4

Начиная с High Sierra, системный демон ntpd был заменен системным демоном timed, который вызывает / usr / libexec / timed.

Лучший исполнитель, который я нашел для получения подробностей - это systemsetup(запуск от имени root) с его различными флагами:

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

Результирующий вывод гораздо менее многословен (= скучен). Например, нет ∂T / детали дрейфа.

По-видимому, timed использует только один ntp-сервер (первый из перечисленных - проверено с помощью WireShark / LittleSnitch), даже если несколько из них введены в системный файл настроек / ntp.conf.

Дальнейшее чтение (не очень техническое): У кого-нибудь есть время? Как High Sierra изменила синхронизацию времени


Устаревший демон ntpd все еще присутствует, но не загружен. Его можно загрузить, введя в Terminal.app:

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

в режиме SIP отключен. Ввод ntpq -pбудет работать снова тогда.

Чтобы загрузить демон в режиме SIP, скопируйте файл в / Library / LaunchDaemons /:

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

Измените метку plist с помощью nano или другого редактора из org.ntp.ntpd-legacy в org.ntp.ntpd:

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

Загрузите демон:

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

Если я найду лучшего исполнителя для получения подробной информации о времени с демоном High Sierra по умолчанию, ответ будет обновлен.


1
Подсказка о включении старого ntpd не подходит при использовании High Sierra, поскольку /System/Library/LaunchDaemons/org.ntp.ntpd-legacy.plist отключена и «защищена» с помощью SIP. Поэтому, если вы не хотите загружать его, сначала отключите SIP. (/ usr / bin / csrutil отключить)
Юрген Брэндл

2

Чтобы получить надежный ответ о том, насколько хорошо установлены ваши часы, запустите ntpdate в режиме отладки:

ntpdate -d pool.ntp.org

Это будет вращаться некоторое время и закончится такой линией, как

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

В этом случае это означало, что мои локальные часы были выключены примерно на 810 мкс (что было бы впечатляющим, если на самом деле верно, но значение значительно ниже 100 мс действительно указывает на рабочую синхронизацию).


1

Чтобы проверить синхронизацию часов, аналогично ответу, который предлагает работать ntpdateв режиме отладки, вы также можете запустить его в режиме запросов для получения менее подробного вывода.

$ 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
$

Это с моего Mac под управлением High Sierra 10.13.2, который работает timedвместо демона NTP ( ntpdateвсе еще работает, потому что он не использует демон NTP).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.