Como posso saber se o meu Mac está mantendo o relógio atualizado corretamente?

45

Gostaria de saber quais são as configurações padrão do OS X em termos de manter o relógio ajustado quando eu ativar a sincronização automática da hora na preferência Data e hora.

Eu sei que o venerável ntpddaemon no Mavericks (10.9) e no Yosemite (10.10) não é mais responsável por ajustar o tempo e, em vez disso, um novo programa pacemakerfoi introduzido - então como posso saber se as coisas estão funcionando ou precisar de ajustes para manter o tempo?

bmike
fonte

Respostas:

71

10.14 Mojave

O Mojave ainda usa timed, mas ntpdatee os ajudantes ntpqsão removidos. Para verificar e atualizar a hora do sistema, você pode ligar sntpdiretamente.

$ 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

Fora da caixa, está faltando um arquivo de rastreamento; portanto, se você receber esse erro inofensivo ao verificar o tempo:

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

ignore o erro ou tente criar esse arquivo vazio:

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

10.13 High Sierra

O High Sierra usa timed, de /usr/libexec/timed, é executado pelo usuário do sistema _timed.

O timed mantém a precisão do relógio do sistema sincronizando o relógio com os relógios de referência por meio de tecnologias como NTP. As entradas são mescladas dentro do tempo programado, onde calcula a incerteza para facilitar o agendamento de trabalhos em tempo proativo. temporizado também está ciente das condições de energia / bateria.

timed é gerenciado pelo LaunchDaemon /System/Library/LaunchDaemons/com.apple.timed.plist. execuções cronometradas…

  • quando o daemon é carregado na inicialização (RunAtLoad: true)
  • a cada 3600 segundos (StartInterval: 3600)
  • quando o Modo Avião estiver desativado (o modo avião com.apple.systemconfiguration mudou: com.apple.radios.plist AirplaneMode false, que parece ser transferido do iOS)

Você pode ver como o relógio está "desligado", observando o conteúdo de /var/db/timed/com.apple.timed.plist, no dicionário TMLastSystemTime, na chave TMTimeError e na chave 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";
}

Captura de tela do Xcode do plist mencionado

timed usa o servidor de horário definido /etc/ntp.conf, que por padrão é

server time.apple.com

O timed também usa o TMTimeSynthesizer, algo que o CoreTime no iOS usa para atualizar o relógio, mas não conheço seu histórico no macOS:

Fontes cronometradas

Não execute o binário temporizado, conforme mencionado na página de manual:

timed não requer argumentos e os usuários não devem iniciá-lo manualmente.

De acordo com o usuário granada29 dos fóruns de desenvolvedores da Apple no post ntpd, cronometrado e chronyd na versão 10.13 , o timed executa o seguinte:

timed parece ser um cliente sntp simples - ou seja, ele pesquisa o NTP periodicamente (15 minutos) e usa a chamada do sistema settimeofday () para definir o relógio do sistema. Suponho que tenha alguma esperteza para evitar atrasar o relógio, mas não há como saber.

10.11 El Capitan a 10.12 Sierra

pacemakeré o daemon responsável por gerenciar o tempo no macOS. Ele usa adjtimepara ajustar o relógio de acordo com o conteúdo de /var/db/ntp.drift.

Você pode ver como o relógio está "desligado", observando o conteúdo de ntp.drift- por exemplo, meu arquivo contém o seguinte:

-23.640

Isso significa que o relógio está a -23,64 PPM da hora que deveria estar. As unidades desse número são PPM, ou partes por milhão. 1 PPM é 1 microssegundo / segundo ou 3,6ms / h.

Você pode atualizar o relógio com mais frequência executando pacemakera -aopção, fornecendo um tempo em segundos para aguardar entre os movimentos do tempo:

/usr/libexec/pacemaker -a 10

Para ver os parâmetros sendo usados ​​pelo OS X para marcapasso, abra /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" );
}

Para encontrar suas configurações atuais, execute com a -iopção:

/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

Você pode mostrar o log executando com a -vopção:

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
fonte
Meu sistema Mojave não sincronizava automaticamente, mas sntpfuncionava. Gostaria de saber se o /var/db/ntp-koderro está causando problemas com a sincronização automática - tente criá-lo e verifique novamente em alguns meses. =)
Ken Williams
5

Esta resposta se aplica apenas a 10.12 Sierra e inferiores.

Os detalhes podem ser úteis para referência, mas outra resposta cobre os detalhes mais recentes de pontualização do macOS de maneira excelente.


O primeiro passo é verificar se o seu horário está configurado.

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

Supondo que você tenha valores de atraso / deslocamento / jitter menores que 100 (o atraso pode ser menor que 1000 em situações normais para sistemas críticos com precisão de tempo), o próximo comando a ser executado no terminal é ntpqseguido pelo servidor de tempo da sua ntpqpreferência e do sistema. Você também pode testar outros servidores de horário para ver se eles têm atrasos menores, pois o sistema de controle de horas gosta de ter uma resposta rápida e próxima dos servidores de horário ao corrigir o tempo para diferenças de milissegundos e calcular como o relógio de hardware atual está se afastando do horário padrão .

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

A próxima coisa a verificar é o seu programa de marcapasso:

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

Isso mostra que, na bateria, o intervalo de ajuste não é maior que uma vez a cada 10 segundos e é ajustado ainda menos se o erro do relógio for menor que 0,1 milissegundo.

Se você achar que seu deslocamento é de segundos ou mais, convém alterar os servidores de tempo que você usa ou talvez alterar os valores usados ​​no marcapasso para usar mais energia e CPU, mas ter um relógio mais próximo do tempo real em troca das configurações que a Apple possui. enviado com 10.9.

bmike
fonte
4

Se você for para http://time.gov, poderá ver a hora oficial (até a segunda) e usá-la para verificar se a hora do sistema está correta ou não. Observe que esse é o horário oficial do NIST e faz sua própria sincronização no navegador, independentemente do horário do sistema (como exemplo, você pode ver aqui que o time.gov lida com segundos bissextos, enquanto o OS X aparentemente não).

asmeurer
fonte
Você poderia elaborar como isso afeta minha escolha de usar "manter o relógio sincronizado"? Suponho que seja uma resposta tão boa quanto "verifique seu Apple Watch - é preciso até o segundo".
bmike
1
A pergunta é "como posso saber se meu Mac está mantendo meu relógio atualizado corretamente?" Se "olhar para o horário oficial" não responder à sua pergunta, você provavelmente deve reformulá-la.
asmeurer
Em relação ao time.gov, é o horário oficial do NIST e faz sua própria sincronização no navegador quando você visita a página. Dizer "verificar um Apple Watch" seria o mesmo que dizer que o relógio do sistema OS X já está sincronizado por padrão (o que é verdade, mas na verdade não responde à pergunta). Isso também é muito mais barato que um Apple Watch, e o Apple Watch não possui um segundo monitor digital AFAIK.
asmeurer
Supus que o relógio tivesse mais engenharia para manter o tempo exato e preciso. Os relógios Mac são notoriamente mais precisos e menos precisos. O mesmo vale para qualquer computador que eu conheço - a precisão é difícil para as horas. +1 para obter uma explicação detalhada dos recursos da web. (Mesmo se não é no corpo da resposta)
bmike
4

Começando com High Sierra, o daemon do sistema ntpd foi substituído pelo daemon do sistema cronometrado, que chama / usr / libexec / timed.

O melhor executivo que encontrei para obter detalhes é systemsetup(executado como root) com seus vários sinalizadores:

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

A saída resultante é de longe menos detalhada (= chata). Por exemplo, sem detalhes ∂T / deriva.

O tempo programado aparentemente usa apenas um servidor ntp (o primeiro listado - verificado com o WireShark / LittleSnitch), mesmo que vários sejam inseridos no arquivo de preferências do sistema / ntp.conf.

Leitura adicional (não muito técnica): Alguém conseguiu? Como a High Sierra mudou a sincronização de horário


Um daemon legado ntpd ainda está presente, mas não foi carregado. Ele pode ser carregado digitando Terminal.app:

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

no modo desativado SIP. A entrada ntpq -pfuncionará novamente então.

Para carregar o daemon no modo ativado por SIP, copie o arquivo para / Library / LaunchDaemons /:

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

Modifique o rótulo do plist com nano ou outro editor de org.ntp.ntpd-legacy para org.ntp.ntpd:

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

Carregue o daemon:

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

Se eu encontrar um executivo melhor para obter detalhes de tempo com o daemon High Sierra padrão, a resposta será atualizada.

Klanomath
fonte
1
A dica para ativar o ntpd antigo não é uma boa opção ao usar o High Sierra, porque /System/Library/LaunchDaemons/org.ntp.ntpd-legacy.plist está desativado e "protegido" com o SIP. Portanto, se você não quiser carregá-lo, desative o SIP primeiro. (/ usr / bin / csrutil disable)
Juergen Braendle
2

Para obter uma resposta confiável sobre como o relógio está definido, execute o ntpdate no modo de depuração:

ntpdate -d pool.ntp.org

Isso girará por um tempo e terminará em uma linha como

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

Nesse caso, isso significava que meu relógio local estava fora de cerca de 810 µs (o que seria espetacular, se realmente verdadeiro, mas o valor bem abaixo de 100 ms indica uma sincronização de trabalho).

cabo
fonte
1

Para verificar a sincronização do relógio, semelhante à resposta que sugere executar ntpdateno modo de depuração, você também pode executá-lo no modo de consulta para obter uma saída menos detalhada.

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

É do meu Mac executando o High Sierra 10.13.2, que é executado timedem vez do daemon NTP ( ntpdateainda funciona porque não usa o daemon NTP).

JungleMartin
fonte