如何判断我的Mac是否保持时钟正确更新?


45

我想知道当在“日期和时间”首选项中启用自动时间同步时,OS X的默认设置在保持时钟调整方面是什么。

我确实知道,ntpd小牛(10.9)和优胜美地(10.10)上古老的守护进程不再负责调整时间,而是pacemaker引入了一个新程序-那么我如何才能知道事情是否正常或需要调整以保持时间?

Answers:


71

10.14莫哈韦沙漠

Mojave仍然使用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高山脉

高塞拉利昂使用timed,从/usr/libexec/timed由系统用户运行_timed

定时通过NTP之类的技术通过将时钟与参考时钟同步来保持系统时钟的准确性。输入在定时内部合并,在此计算不确定性,以方便安排主动式时间作业。定时也了解电源/电池状况。

定时由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.plistTMTimeError键和TMScaleFactorError键的TMLastSystemTime词典下的内容,可以了解时钟的运行情况。

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

提到的plist的Xcode屏幕截图

timed使用中设置的时间服务器/etc/ntp.conf,默认情况下为

server time.apple.com

timed还使用TMTimeSynthesizer,iOS上的CoreTime使用它来更新时钟,但我不知道其在macOS上的历史记录:

定时源

如手册页中所述,不要自己运行定时二进制文件:

定时不带任何参数,用户不应手动启动它。

根据Apple Developer Forums用户granada29在ntpd中的帖子,在10.13中进行计时和计时,计时执行以下操作:

定时似乎是一个简单的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.6ms / h。

您可以通过运行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 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毫秒,则调整间隔甚至更少。

如果您发现偏移量是秒或更多,则可能要更改使用的时间服务器,或者更改起搏器上使用的值以使用更多的能量和CPU,但时钟要接近真实时间以换取Apple的设置随附10.9。


4

如果您访问http://time.gov,则可以看到官方时间(最多2秒钟),并使用该时间来验证系统时间是否正确。请注意,这是NIST的官方时间,它在浏览器中进行独立于系统时间的同步(例如,您可以在此处看到time.gov处理leap秒,而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系统守护程序已替换为定时系统守护程序,后者调用/ usr / libexec / timed。

我发现最好的执行程序详细信息是systemsetup(以root身份运行)及其各种标志:

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

所产生的输出要少得多(很无聊)。例如,没有∂T/漂移细节。

即使在系统偏好设置/ntp.conf文件中输入了多个ntp服务器,显然定时也仅使用一个ntp服务器(列出的第一个服务器-通过WireShark / LittleSnitch检查)。

进一步阅读(不是非常技术性):有谁有时间?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

使用nano或其他编辑器从org.ntp.ntpd-legacy到org.ntp.ntpd修改plist的标签:

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

加载守护程序:

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

如果我找到更好的执行程序以使用默认的High Sierra守护程序获取时间详细信息,则答案将被更新。


1
使用High Sierra时,启用旧ntpd的技巧不是一个好的选择,因为/System/Library/LaunchDaemons/org.ntp.ntpd-legacy.plist已禁用,并且已通过SIP“保护”。因此,如果您不想加载它,则必须先禁用SIP。(/ usr / bin / csrutil disable)
Juergen Braendle

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 µs(如果实际上是正确的,那将是惊人的,但是该值远低于100 ms确实表明工作正常)。


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
$

这是从运行High Sierra 10.13.2的Mac运行的,它运行的timed不是NTP守护程序,而是运行的(ntpdate因为它不使用NTP守护程序,因此仍然有效)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.