Я хотел бы знать, каковы настройки по умолчанию для OS X с точки зрения настройки часов, когда я включаю автоматическую синхронизацию времени в настройках даты и времени.
Я знаю, что почтенный ntpd
демон на Mavericks (10.9) и Yosemite (10.10) больше не отвечает за настройку времени, и вместо этого pacemaker
была введена новая программа — так как я могу знать, что все работает или нуждается в настройке, чтобы сохранить время?
Мохаве по-прежнему использует 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
High Sierra использует timed
, from /usr/libexec/timed
, запускаемый системным пользователем _timed
.
timed поддерживает точность системных часов, синхронизируя часы с эталонными часами с помощью таких технологий, как NTP. Входные данные объединяются внутри timed, где вычисляется неопределенность для облегчения планирования упреждающих заданий на время. timed также знает о состоянии питания/батареи.
timed управляется LaunchDaemon /System/Library/LaunchDaemons/com.apple.timed.plist
. забеги на время…
Вы можете увидеть, насколько «выключены» ваши часы, просмотрев содержимое /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 самостоятельно, как указано на странице руководства:
timed не принимает аргументов, и пользователям не следует запускать его вручную.
По словам пользователя Apple Developer Forums granada29 в сообщении ntpd, timed и chronyd в 10.13 , timed выполняет следующее:
timed выглядит как простой клиент sntp, т.е. он периодически (15 минут) опрашивает NTP и использует системный вызов settimeofday() для установки системных часов. Я предполагаю, что у него есть некоторая хитрость, чтобы не переводить часы назад, но нет никакого способа сказать.
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%
Если вы зайдете на http://time.gov , вы сможете увидеть официальное время (с точностью до секунды) и использовать его, чтобы проверить правильность вашего системного времени или нет. Обратите внимание, что это официальное время NIST, и оно выполняет собственную синхронизацию в браузере, независимо от системного времени (в качестве примера вы можете видеть здесь , что time.gov обрабатывает дополнительные секунды, а OS X, по-видимому, нет).
Начиная с 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 по умолчанию, ответ будет обновлен.
Детали могут быть полезны для справки, но другой ответ отлично описывает новые детали хронометража 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).
Кен Уильямс
sntp
работала. Интересно, вызывает ли/var/db/ntp-kod
ошибка проблемы с автоматической синхронизацией? Попробую создать ее и проверю через несколько месяцев. знак равно