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

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

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

Ответы (6)

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

создайте файл и измените владельца на root. Некоторые люди сообщали, что это фактически нарушало синхронизацию ntp.

sudo touch /var/db/ntp-kod
sudo chown root:wheel /var/db/ntp-kod

Затем запустите снова, чтобы проверить, исчезло ли сообщение об ошибке.

sudo sntp -sS pool.ntp.org

10.13 Высокая Сьерра

High Sierra использует timed, from /usr/libexec/timed, запускаемый системным пользователем _timed.

timed поддерживает точность системных часов, синхронизируя часы с эталонными часами с помощью таких технологий, как NTP. Входные данные объединяются внутри timed, где вычисляется неопределенность для облегчения планирования упреждающих заданий на время. timed также знает о состоянии питания/батареи.

timed управляется LaunchDaemon /System/Library/LaunchDaemons/com.apple.timed.plist. забеги на время…

  • когда демон загружается при загрузке (RunAtLoad: true)
  • каждые 3600 секунд (StartInterval: 3600)
  • когда режим полета отключен (режим полета com.apple.systemconfiguration изменен: com.apple.radios.plist AirplaneMode false, который, по-видимому, перенесен из 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 самостоятельно, как указано на странице руководства:

timed не принимает аргументов, и пользователям не следует запускать его вручную.

По словам пользователя Apple Developer Forums granada29 в сообщении ntpd, timed и chronyd в 10.13 , timed выполняет следующее:

timed выглядит как простой клиент sntp, т.е. он периодически (15 минут) опрашивает NTP и использует системный вызов settimeofday() для установки системных часов. Я предполагаю, что у него есть некоторая хитрость, чтобы не переводить часы назад, но нет никакого способа сказать.

10.11 Эль-Капитан в 10.12 Сьерра

pacemakerэто демон, отвечающий за управление временем в macOS. Он используется adjtimeдля настройки часов в соответствии с содержимым файла /var/db/ntp.drift.

Вы можете увидеть, насколько «выключены» ваши часы, посмотрев содержимое ntp.drift— например, мой файл содержит следующее:

-23.640

Это означает, что часы на -23,64 PPM отличаются от времени, которое должно быть. Единицы этого числа — PPM или частей на миллион. 1 PPM равен 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ошибка проблемы с автоматической синхронизацией? Попробую создать ее и проверю через несколько месяцев. знак равно

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

Не могли бы вы уточнить, как это влияет на мой выбор использования «синхронизировать часы». Я полагаю, что это такой же хороший ответ, как «проверьте свои Apple Watch - они точны с точностью до секунды».
Вопрос в том, «как я могу узнать, правильно ли мой Mac обновляет мои часы?» Если «посмотрите на официальное время» не отвечает на ваш вопрос, вам, вероятно, следует перефразировать его.
Что касается time.gov, то это официальное время NIST, и оно выполняет собственную синхронизацию в браузере, когда вы посещаете страницу. Сказать «проверьте Apple Watch» будет то же самое, что сказать вам, что ваши системные часы OS X уже синхронизированы по умолчанию (что верно, но на самом деле не отвечает на вопрос). Это также намного дешевле, чем Apple Watch, и у Apple Watch нет второго цифрового дисплея, насколько мне известно.
Мое предположение заключалось в том, что в часах больше технических средств, чтобы время было точным и точным. Часы Mac, как известно, слишком точны и недостаточно точны. То же самое относится к любому компьютеру, о котором я знаю, - точность трудно хронометрировать. +1 за подробное объяснение веб-функций. (Даже если его нет в теле ответа)

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

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

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

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

Судя по всему, timed использует только один ntp-сервер (первый в списке - проверено с помощью WireShark/LittleSnitch), даже если в файле system settings/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

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

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

Этот ответ относится только к 10.12 Sierra и ниже.

Детали могут быть полезны для справки, но другой ответ отлично описывает новые детали хронометража 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.

Чтобы получить достоверный ответ о том, насколько точно настроены ваши часы, запустите 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 мс указывает на работающую синхронизацию).

Чтобы проверить синхронизацию часов, аналогично ответу, который предлагает запустить 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).