Bagaimana saya bisa tahu apakah Mac saya memperbarui jam dengan benar?

45

Saya ingin tahu apa pengaturan default untuk OS X dalam hal menjaga jam disesuaikan ketika saya mengaktifkan sinkronisasi waktu otomatis dalam preferensi Tanggal & Waktu.

Saya tahu bahwa ntpddaemon terhormat di Mavericks (10.9) dan Yosemite (10.10) tidak lagi bertanggung jawab untuk menyesuaikan waktu dan sebaliknya sebuah program baru pacemakertelah diperkenalkan - jadi bagaimana saya bisa mengetahui segala sesuatu bekerja atau perlu penyesuaian untuk menjaga waktu?

bmike
sumber

Jawaban:

71

10.14 Mojave

Mojave masih menggunakan timed, tetapi ntpdatedan pembantu ntpqdihapus. Untuk memeriksa dan memperbarui waktu sistem Anda, Anda dapat menelepon sntplangsung.

$ sudo sntp -sS pool.ntp.org
Password:
sntp [email protected] 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

Di luar kotak, file pelacakan tidak ada, jadi jika Anda mendapatkan kesalahan yang tidak berbahaya saat memeriksa waktu:

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

abaikan kesalahan atau coba buat file kosong itu:

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

10.13 Sierra Tinggi

Sierra tinggi menggunakan timed, dari /usr/libexec/timed, dijalankan oleh pengguna sistem _timed.

timed menjaga akurasi jam sistem dengan menyinkronkan jam dengan jam referensi melalui teknologi seperti NTP. Input digabungkan dalam timed, di mana menghitung ketidakpastian untuk memfasilitasi penjadwalan pekerjaan waktu proaktif. waktunya juga mengetahui kondisi daya / baterai.

waktunya diatur oleh LaunchDaemon /System/Library/LaunchDaemons/com.apple.timed.plist. berjalan waktunya ...

  • ketika daemon dimuat saat boot (RunAtLoad: true)
  • setiap 3600 detik (StartInterval: 3600)
  • ketika Mode Pesawat dinonaktifkan (com.apple.systemconfiguration mode pesawat berubah: com.apple.radios.plist AirplaneMode false, yang tampaknya dibawa dari iOS)

Anda dapat melihat bagaimana 'mematikan' jam Anda dengan melihat isi /var/db/timed/com.apple.timed.plist, di bawah kamus TMLastSystemTime di kunci TMTimeError dan kunci 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";
}

Tangkapan layar Xcode dari daftar yang disebutkan

waktunya menggunakan server waktu yang disetel /etc/ntp.conf, yang secara default adalah

server time.apple.com

waktunya juga menggunakan TMTimeSynthesizer, sesuatu yang menggunakan CoreTime di iOS untuk memperbarui jam dengan tetapi saya tidak mengetahui sejarahnya di macOS:

Sumber waktunya

Jangan jalankan biner waktunya sendiri, seperti yang disebutkan di halaman manual:

waktunya tidak memerlukan argumen, dan pengguna tidak harus meluncurkannya secara manual.

Menurut granada29 pengguna Forum Pengembang Apple di posting ntpd, waktunya dan chronyd di 10.13 , waktunya melakukan yang berikut:

waktunya tampaknya menjadi klien sntp sederhana - yaitu, polling NTP secara berkala (15 menit) dan menggunakan panggilan system settimeofday () untuk mengatur jam sistem. Saya menganggap itu memiliki kepintaran untuk menghindari melangkah mundur, tetapi tidak ada cara untuk mengatakannya.

10.11 El Capitan hingga 10.12 Sierra

pacemakeradalah daemon yang bertanggung jawab untuk mengatur waktu di macOS. Ini digunakan adjtimeuntuk menyesuaikan jam per konten /var/db/ntp.drift.

Anda dapat melihat bagaimana 'mematikan' jam Anda dengan melihat konten ntp.drift- misalnya, file saya berisi yang berikut ini:

-23.640

Ini berarti bahwa jam -23.64 PPM jauh dari waktu yang seharusnya. Unit-unit dari nomor ini adalah PPM, atau Parts Per Million. 1 PPM adalah 1 mikrodetik / detik, atau 3,6 ms / jam.

Anda dapat membuat pembaruan jam lebih sering dengan menjalankan pacemakerdengan -aopsi, menyediakan waktu dalam detik untuk menunggu di antara pergerakan waktu:

/usr/libexec/pacemaker -a 10

Untuk melihat parameter yang digunakan oleh OS X untuk alat pacu jantung, buka /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" );
}

Untuk menemukan pengaturan Anda saat ini, jalankan dengan -iopsi:

/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

Anda dapat menampilkan log dengan menjalankan dengan -vopsi:

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%
GRG
sumber
Sistem Mojave saya tidak akan disinkronkan secara otomatis, tetapi sntpberfungsi. Saya ingin tahu apakah /var/db/ntp-kodkesalahan tersebut menyebabkan masalah dengan sinkronisasi otomatis - akan mencoba membuatnya dan memeriksa kembali dalam beberapa bulan. =)
Ken Williams
5

Jawaban ini hanya berlaku untuk 10.12 Sierra dan lebih rendah.

Detailnya mungkin bermanfaat untuk referensi, tetapi jawaban lain mencakup detail ketepatan waktu macOS yang lebih baru dengan sangat baik.


Langkah pertama adalah melihat apakah waktu Anda sudah diatur.

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

Dengan asumsi Anda memiliki nilai delay / offset / jitter kurang dari 100 (keterlambatan bisa kurang dari 1000 dalam situasi normal untuk sistem yang kurang akurat-waktu-kritis), perintah berikutnya untuk berjalan di terminal ntpqdiikuti oleh penghitung waktu dari ntpqpreferensi Anda dan sistem. Anda juga dapat menguji server waktu lain untuk melihat apakah mereka memiliki penundaan yang lebih rendah karena sistem ketepatan waktu suka memiliki respons yang dekat dan cepat dari server waktu ketika mengoreksi waktu untuk perbedaan milidetik dan menghitung bagaimana jam perangkat keras saat ini bergerak menjauh dari waktu standar. .

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

Hal berikutnya yang perlu diperiksa adalah program alat pacu jantung Anda:

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

Ini menunjukkan bahwa pada baterai, interval penyesuaian tidak lebih dari sekali setiap 10 detik dan menyesuaikan bahkan lebih sedikit jika kesalahan jam kurang dari 0,1 milidetik.

Jika Anda menemukan bahwa offset Anda adalah detik atau lebih, Anda mungkin ingin mengubah server waktu yang Anda gunakan atau mungkin mengubah nilai yang digunakan pada alat pacu jantung untuk menggunakan lebih banyak energi dan CPU tetapi memiliki jam lebih dekat dengan waktu sebenarnya dalam pertukaran untuk pengaturan yang Apple miliki. dikirim dengan 10.9.

bmike
sumber
4

Jika Anda membuka http://time.gov, Anda dapat melihat waktu resmi (hingga detik) dan menggunakannya untuk memverifikasi apakah waktu sistem Anda benar atau tidak. Perhatikan bahwa ini adalah waktu NIST resmi, dan melakukan sinkronisasi sendiri di browser, terlepas dari waktu sistem (sebagai contoh, Anda dapat melihat di sini bahwa time.gov menangani detik kabisat, sedangkan OS X tampaknya tidak).

penilai
sumber
Bisakah Anda menguraikan bagaimana ini mempengaruhi pilihan saya untuk menggunakan "jaga agar waktu tetap disinkronkan" Saya kira ini adalah jawaban yang sama baiknya dengan "periksa Apple Watch Anda - akurat hingga detik."
bmike
1
Pertanyaannya adalah "bagaimana saya bisa tahu apakah Mac saya menjaga jam saya diperbarui dengan benar?" Jika "lihat waktu resmi" tidak menjawab pertanyaan Anda, Anda mungkin harus mengulanginya.
penanggung jawab
Mengenai time.gov, ini adalah waktu NIST resmi , dan melakukan sinkronisasi sendiri di browser ketika Anda mengunjungi halaman. Mengatakan "centang Apple Watch" akan sama dengan hanya memberi tahu Anda bahwa jam sistem OS X Anda sudah disinkronkan secara default (yang benar, tetapi tidak benar-benar menjawab pertanyaan). Ini juga jauh lebih murah daripada Apple Watch, dan Apple Watch tidak memiliki AFAIK tampilan digital kedua.
penanggung jawab
Anggapan saya adalah arloji memiliki lebih banyak teknik untuk menjaga waktu menjadi akurat dan tepat. Jam Mac terkenal terlalu akurat dan kurang akurat. Hal yang sama berlaku untuk komputer mana pun yang saya ketahui - akurasi sulit untuk ketepatan waktu. +1 untuk penjelasan terperinci fitur-fitur web. (Bahkan jika itu tidak ada dalam jawaban)
bmike
4

Dimulai dengan High Sierra, daemon sistem ntpd digantikan dengan daemon sistem berjangka waktu yang memanggil / usr / libexec / waktunya.

Eksekutif terbaik yang saya temukan untuk mendapatkan detail adalah systemsetup(jalankan sebagai root) dengan berbagai flagnya:

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

Output yang dihasilkan jauh lebih sedikit verbose (= membosankan). Misalnya tidak ada rincian ∂T / drift.

Rupanya waktunya menggunakan hanya satu ntp-server (yang pertama terdaftar - diperiksa dengan WireShark / LittleSnitch) bahkan jika beberapa dimasukkan dalam file preferensi sistem / ntp.conf.

Bacaan lebih lanjut (tidak terlalu teknis): Adakah yang punya waktu? Bagaimana High Sierra mengubah sinkronisasi waktu


Daemon ntpd lawas masih ada tetapi diturunkan. Itu dapat dimuat meskipun dengan memasukkan di Terminal.app:

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

dalam mode SIP dinonaktifkan. Memasuki ntpq -pakan bekerja lagi kalau begitu.

Untuk memuat daemon dalam mode aktif SIP, salin file ke / Library / LaunchDaemons /:

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

Ubah label daftar dengan nano atau editor lain dari org.ntp.ntpd-legacy ke org.ntp.ntpd:

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

Muat daemon:

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

Jika saya menemukan eksekutif yang lebih baik untuk mendapatkan rincian waktu dengan daemon High Sierra default, jawabannya akan diperbarui.

klanomath
sumber
1
Tip dengan mengaktifkan ntpd lama bukan pilihan yang baik ketika menggunakan High Sierra, karena /System/Library/LaunchDaemons/org.ntp.ntpd-legacy.plist dinonaktifkan dan "diamankan" dengan SIP. Jadi, jika Anda tidak ingin memuatnya, Anda harus menonaktifkan SIP terlebih dahulu. (/ usr / bin / csrutil nonaktifkan)
Juergen Braendle
2

Untuk mendapatkan jawaban yang dapat diandalkan tentang seberapa baik jam Anda disetel, jalankan ntpdate dalam mode debug:

ntpdate -d pool.ntp.org

Ini akan berputar untuk sementara waktu dan berakhir pada garis seperti

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

Dalam hal ini, ini berarti jam lokal saya mati sekitar 810 μs (yang akan spektakuler, jika benar-benar benar, tetapi nilainya jauh di bawah 100 ms tidak menunjukkan sinkronisasi yang berfungsi).

cabo
sumber
1

Untuk memeriksa sinkronisasi jam, mirip dengan jawaban yang menyarankan untuk dijalankan ntpdatedalam mode debug, Anda juga dapat menjalankannya dalam mode Query untuk menghasilkan keluaran yang lebih sedikit.

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

Ini dari Mac saya yang menjalankan High Sierra 10.13.2, yang berjalan timeddaripada daemon NTP ( ntpdatemasih berfungsi karena tidak menggunakan daemon NTP).

JungleMartin
sumber