Làm cách nào để biết máy Mac của tôi có giữ đồng hồ được cập nhật đúng không?


45

Tôi muốn biết cài đặt mặc định cho OS X là gì để giữ đồng hồ được điều chỉnh khi tôi bật đồng bộ hóa thời gian tự động trong tùy chọn Ngày & Giờ.

Tôi biết rằng ntpdtrình nền đáng kính trên Mavericks (10.9) và Yosemite (10.10) không còn chịu trách nhiệm điều chỉnh thời gian và thay vào đó một chương trình mới pacemakerđã được giới thiệu - vậy làm thế nào tôi có thể biết mọi thứ đang hoạt động hoặc cần điều chỉnh để giữ thời gian?

Câu trả lời:


71

10,14 Mojave

Mojave vẫn sử dụng timed, nhưng ntpdatenhững người trợ giúp ntpqđược gỡ bỏ. Để kiểm tra và cập nhật thời gian hệ thống của bạn, bạn có thể gọi sntptrực tiếp.

$ 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

Ngoài hộp, một tệp theo dõi bị thiếu, vì vậy nếu bạn gặp phải lỗi vô hại này khi kiểm tra thời gian:

kod_init_kod_db(): Cannot open KoD db file /var/db/ntp-kod: No such file or directory

hoặc bỏ qua lỗi hoặc thử tạo tệp trống đó:

sudo touch /var/db/ntp-kod
sudo chmod 666 /var/db/ntp-kod

10,13 Sierra

High Sierra sử dụng timed, từ /usr/libexec/timed, được điều hành bởi người dùng hệ thống _timed.

timed duy trì độ chính xác của đồng hồ hệ thống bằng cách đồng bộ hóa đồng hồ với đồng hồ tham chiếu thông qua các công nghệ như NTP. Các đầu vào được hợp nhất bên trong thời gian, trong đó nó tính toán độ không chắc chắn để tạo điều kiện lên lịch cho các công việc thời gian chủ động. thời gian cũng nhận thức được các điều kiện năng lượng / pin.

thời gian được quản lý bởi LaunchDaemon /System/Library/LaunchDaemons/com.apple.timed.plist. chạy theo thời gian

  • khi daemon được tải khi khởi động (RunAtLoad: true)
  • cứ sau 3600 giây (StartInterval: 3600)
  • khi Chế độ trên máy bay bị tắt (com.apple.systemconfiguration chế độ máy bay đã thay đổi: com.apple.radios.plist AirplaneMode sai, có vẻ như được chuyển từ iOS)

Bạn có thể thấy mức độ "tắt" đồng hồ của mình bằng cách xem nội dung của /var/db/timed/com.apple.timed.plist, trong từ điển TMLastSystemTime trong khóa TMTimeError và khóa 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";
}

Ảnh chụp màn hình Xcode của plist đã đề cập

timed sử dụng máy chủ thời gian được đặt /etc/ntp.conf, theo mặc định là

server time.apple.com

timed cũng sử dụng TMTimeSynthesizer, thứ mà CoreTime trên iOS sử dụng để cập nhật đồng hồ nhưng tôi không biết về lịch sử của nó trên macOS:

nguồn thời gian

Đừng tự chạy nhị phân theo thời gian, như đã đề cập trong trang man:

Thời gian không có đối số và người dùng không nên khởi chạy thủ công.

Theo người dùng Diễn đàn Nhà phát triển Apple granada29 trong bài đăng ntpd, tính thời gian và chronyd trong 10.13 , thời gian thực hiện như sau:

timed dường như là một máy khách sntp đơn giản - tức là nó thăm dò NTP định kỳ (15 phút) và sử dụng lệnh gọi hệ thống giải quyết () để đặt đồng hồ sytem. Tôi cho rằng nó có một số thông minh để tránh đẩy lùi đồng hồ nhưng không có cách nào để nói.

10.11 El Capitan đến 10.12 Sierra

pacemakerlà daemon chịu trách nhiệm quản lý thời gian trong macOS. Nó sử dụng adjtimeđể điều chỉnh đồng hồ theo nội dung của /var/db/ntp.drift.

Bạn có thể thấy cách 'tắt' đồng hồ của mình bằng cách xem nội dung của ntp.drift- ví dụ: tệp của tôi chứa các mục sau:

-23.640

Điều này có nghĩa là đồng hồ cách -23,64 PPM so với thời điểm cần thiết. Đơn vị của số này là PPM, hoặc Phần mỗi triệu. 1 PPM là 1 micro giây / giây hoặc 3,6ms / h.

Bạn có thể thực hiện cập nhật đồng hồ thường xuyên hơn bằng cách chạy pacemakervới -atùy chọn, cung cấp thời gian tính bằng giây để chờ giữa các chuyển động thời gian:

/usr/libexec/pacemaker -a 10

Để xem các tham số đang được OS X sử dụng cho máy điều hòa nhịp tim, hãy mở /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" );
}

Để tìm cài đặt hiện tại của bạn, hãy chạy với -itùy chọn:

/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

Bạn có thể hiển thị nhật ký bằng cách chạy với -vtùy chọn:

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%

Hệ thống Mojave của tôi sẽ không tự động đồng bộ hóa, nhưng sntpđã hoạt động. Tôi tự hỏi nếu /var/db/ntp-kodlỗi gây ra sự cố với đồng bộ hóa tự động - sẽ thử tạo nó và kiểm tra lại sau vài tháng. =)
Ken Williams

5

Câu trả lời này chỉ áp dụng cho 10.12 Sierra và thấp hơn.

Các chi tiết có thể hữu ích để tham khảo, nhưng một câu trả lời khác bao gồm các chi tiết chấm công macOS mới hơn một cách xuất sắc.


Bước đầu tiên là xem thời gian của bạn đã được thiết lập chưa.

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

Giả sử bạn có giá trị độ trễ / bù / jitter nhỏ hơn 100 (độ trễ có thể nhỏ hơn 1000 trong các tình huống thông thường đối với các hệ thống ít chính xác về thời gian), lệnh tiếp theo để chạy trong thiết bị đầu cuối được ntpqtheo sau bởi máy chủ thời gian từ ntpqtùy chọn hệ thống của bạn . Bạn cũng có thể kiểm tra các máy chủ thời gian khác để xem liệu chúng có độ trễ thấp hơn hay không vì hệ thống chấm công thích có phản hồi nhanh, nhanh từ các máy chủ thời gian khi sửa thời gian cho chênh lệch mili giây và tính toán cách đồng hồ phần cứng hiện tại trôi đi so với thời gian tiêu chuẩn .

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

Điều tiếp theo cần kiểm tra là chương trình tạo nhịp của bạn:

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

Điều này cho thấy trên pin, khoảng thời gian điều chỉnh không quá một lần cứ sau 10 giây và điều chỉnh thậm chí ít hơn nếu lỗi đồng hồ nhỏ hơn 0,1 mili giây.

Nếu bạn thấy rằng độ lệch của bạn là vài giây trở lên, bạn có thể muốn thay đổi thời gian bạn sử dụng hoặc có thể thay đổi các giá trị được sử dụng trên máy điều hòa nhịp tim để sử dụng nhiều năng lượng và CPU hơn nhưng có đồng hồ gần hơn với thời gian thực để đổi lấy các cài đặt mà Apple có vận chuyển với 10.9.


4

Nếu bạn truy cập http://time.gov, bạn có thể xem thời gian chính thức (tối đa là lần thứ hai) và sử dụng thời gian đó để xác minh xem thời gian hệ thống của bạn có chính xác hay không. Lưu ý rằng đây là thời gian NIST chính thức và thực hiện đồng bộ hóa riêng trong trình duyệt, độc lập với thời gian hệ thống (ví dụ, bạn có thể thấy ở đây time.gov xử lý giây nhuận, trong khi OS X rõ ràng là không).


Bạn có thể giải thích làm thế nào điều này ảnh hưởng đến sự lựa chọn của tôi để sử dụng "giữ cho đồng hồ được đồng bộ hóa" Tôi cho rằng đây là một câu trả lời tốt như "kiểm tra Apple Watch của bạn - nó chính xác đến từng giây".
bmike

1
Câu hỏi là "làm thế nào tôi có thể biết máy Mac của mình có giữ đồng hồ được cập nhật đúng không?" Nếu "nhìn vào thời gian chính thức" không trả lời câu hỏi của bạn, có lẽ bạn nên viết lại câu hỏi đó.
asmeker

Về time.gov, đây là giờ chính thức của NIST và tự đồng bộ hóa trên trình duyệt khi bạn truy cập trang. Nói "kiểm tra Apple Watch" sẽ giống như chỉ cho bạn biết rằng đồng hồ hệ thống OS X của bạn đã được đồng bộ hóa theo mặc định (điều này đúng, nhưng không thực sự trả lời câu hỏi). Điều này cũng rẻ hơn nhiều so với Apple Watch và Apple Watch không có màn hình kỹ thuật số thứ hai AFAIK.
asmeker

Giả sử của tôi là chiếc đồng hồ có nhiều kỹ thuật hơn để giữ thời gian cả chính xác và chính xác. Đồng hồ Mac nổi tiếng là chính xác và dưới chính xác. Điều tương tự cũng xảy ra với bất kỳ máy tính nào tôi biết - độ chính xác rất khó để chấm công. +1 để giải thích chi tiết về các tính năng web. (Ngay cả khi nó không nằm trong phần câu trả lời)
bmike

4

Bắt đầu với High Sierra, trình nền hệ thống ntpd đã được thay thế bằng trình nền hệ thống được định thời để gọi / usr / libexec / timed.

Trình thực thi tốt nhất mà tôi đã tìm thấy để có được thông tin chi tiết là systemsetup(chạy với quyền root) với các cờ khác nhau:

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

Kết quả đầu ra là ít dài dòng hơn (= nhàm chán). Ví dụ: không có chi tiết ∂T / trôi.

Rõ ràng thời gian chỉ sử dụng một máy chủ ntp (máy chủ đầu tiên được liệt kê - được kiểm tra bằng WireShark / LittleSnitch) ngay cả khi một số được nhập vào tệp ưu tiên hệ thống / ntp.conf.

Đọc thêm (không kỹ thuật lắm): Có ai có thời gian chưa? Làm thế nào High Sierra đã thay đổi đồng bộ hóa thời gian


Một daemon ntpd di sản vẫn còn nhưng không được tải. Nó có thể được tải mặc dù bằng cách nhập vào Terminal.app:

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

trong chế độ vô hiệu hóa SIP. Bước vào ntpq -psẽ hoạt động trở lại sau đó.

Để tải daemon trong chế độ kích hoạt SIP, sao chép tệp vào / Library / LaunchDaemons /:

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

Sửa đổi nhãn của plist bằng nano hoặc trình chỉnh sửa khác từ org.ntp.ntpd-legacy thành org.ntp.ntpd:

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

Tải daemon:

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

Nếu tôi tìm thấy một người thực thi tốt hơn để có được thông tin chi tiết về thời gian với trình nền High Sierra mặc định, câu trả lời sẽ được cập nhật.


1
Mẹo với việc bật ntpd cũ không phải là một lựa chọn tốt khi sử dụng High Sierra, bởi vì / System / L Library / LaunchDaemons / org.ntp.ntpd-legacy.plist bị vô hiệu hóa và "được bảo mật" với SIP. Vì vậy, nếu bạn không tải nó, trước tiên bạn phải tắt SIP. (/ usr / bin / csrutil vô hiệu hóa)
Juergen Braendle

2

Để có câu trả lời đáng tin cậy về mức độ đồng hồ của bạn được đặt, hãy chạy ntpdate trong chế độ gỡ lỗi:

ntpdate -d pool.ntp.org

Điều này sẽ quay vòng trong một thời gian và kết thúc trong một dòng như

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

Trong trường hợp này, điều này có nghĩa là đồng hồ cục bộ của tôi đã tắt một số 810 (điều này thật ngoạn mục, nếu thực sự đúng, nhưng giá trị dưới 100 ms cho thấy đồng bộ hóa đang hoạt động).


1

Để kiểm tra đồng bộ hóa đồng hồ, tương tự như câu trả lời gợi ý chạy ntpdatetrong chế độ gỡ lỗi, bạn cũng có thể chạy nó trong chế độ Truy vấn để có đầu ra ít dài dòng hơn.

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

Đây là từ máy Mac của tôi chạy High Sierra 10.13.2, nó chạy timedchứ không phải là daemon NTP ( ntpdatevẫn hoạt động vì nó không sử dụng daemon NTP).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.