Answers:
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
高塞拉利昂使用timed
,从/usr/libexec/timed
由系统用户运行_timed
。
定时通过NTP之类的技术通过将时钟与参考时钟同步来保持系统时钟的准确性。输入在定时内部合并,在此计算不确定性,以方便安排主动式时间作业。定时也了解电源/电池状况。
定时由LaunchDaemon管理/System/Library/LaunchDaemons/com.apple.timed.plist
。定时运行…
通过查看/var/db/timed/com.apple.timed.plist
TMTimeError键和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";
}
timed使用中设置的时间服务器/etc/ntp.conf
,默认情况下为
server time.apple.com
timed还使用TMTimeSynthesizer,iOS上的CoreTime使用它来更新时钟,但我不知道其在macOS上的历史记录:
如手册页中所述,不要自己运行定时二进制文件:
定时不带任何参数,用户不应手动启动它。
根据Apple Developer Forums用户granada29在ntpd中的帖子,在10.13中进行计时和计时,计时执行以下操作:
定时似乎是一个简单的sntp客户端-即它会定期(15分钟)轮询NTP,并使用settimeofday()系统调用来设置系统时钟。我认为它有一些聪明之处,可以避免将时钟倒退,但是没有办法说出来。
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%
这些详细信息可能有助于参考,但是另一个答案可以很好地涵盖新的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。
如果您访问http://time.gov,则可以看到官方时间(最多2秒钟),并使用该时间来验证系统时间是否正确。请注意,这是NIST的官方时间,它在浏览器中进行独立于系统时间的同步(例如,您可以在此处看到time.gov处理leap秒,而OS X显然不行)。
从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守护程序获取时间详细信息,则答案将被更新。
要检查时钟同步,类似于建议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守护程序,因此仍然有效)。
sntp
工作。我不知道该/var/db/ntp-kod
错误是否会导致自动同步出现问题-会尝试创建它并在几个月后再检查一次。=)