Questão Como forçar uma atualização de relógio usando o ntp?


Estou executando o Ubuntu em um sistema embarcado baseado em ARM que não possui um RTC suportado por bateria. O horário de despertar está em algum lugar durante 1970. Assim, eu uso o serviço NTP para atualizar o horário atual.

Eu adicionei a seguinte linha para /etc/rc.local Arquivo:

sudo ntpdate -s time.nist.gov

No entanto, após a inicialização, ainda leva alguns minutos até que a hora seja atualizada, período durante o qual não posso trabalhar com eficiência tar e make.

Como posso forçar uma atualização de relógio a qualquer momento?


ATUALIZAÇÃO 1: O seguinte (graças a Eric e Stephan) funciona bem a partir da linha de comando, mas não consegue atualizar o relógio quando colocar em /etc/rc.local:

$ date ; sudo service ntp stop ; sudo ntpdate -s time.nist.gov ; sudo service ntp start ; date
Thu Jan  1 00:00:58 UTC 1970
 * Stopping NTP server ntpd     [ OK ] 
 * Starting NTP server          [ OK ] 
Thu Feb 14 18:52:21 UTC 2013

O que estou fazendo de errado?


ATUALIZAÇÃO 2: Eu tentei seguir as poucas sugestões que vieram em resposta à primeira atualização, mas nada parece realmente fazer o trabalho conforme necessário. Aqui está o que eu tentei:

  1. Substitua o servidor para us.pool.ntp.org
  2. Use caminhos explícitos para os programas
  3. Remova o ntp serviço completamente e sair apenas sudo ntpdate ... dentro rc.local
  4. Remova o sudo do comando acima em rc.local

Usando o acima, a máquina ainda começa em 1970. No entanto, ao fazer isso a partir da linha de comando uma vez logado (via ssh), o relógio é atualizado assim que eu invoco ntpdate.

A última coisa que fiz foi remover isso do rc.local e faça uma ligação para ntpdate no meu .bashrc Arquivo. Isso atualiza o relógio conforme o esperado e eu recebo a hora atual verdadeira assim que o prompt de comando estiver disponível.

ContudoIsso significa que, se a máquina estiver ligada e nenhum usuário estiver logado, a hora nunca receberá atualizações. Eu posso, claro, reinstalar o ntp serviço, pelo menos, o relógio é atualizado dentro de alguns minutos da inicialização, mas depois estamos de volta ao quadrado 1.

Então, há uma razão pela qual colocar o ntpdate comando em rc.local não executa a tarefa necessária, ao fazê-lo em .bashrc funciona bem?


325
2018-02-13 21:58


origem


de [aqui] [1]: ntpdate -s ntp.ubuntu.com     [1]: askubuntu.com/a/81301/130162 - 18446744073709551615
observe o sinalizador '-b' no ntpdate. A partir da página man do ntpdate: "Force o tempo a ser escalonado usando a chamada do sistema settimeofday (), em vez de usar o comando adjtime (). Essa opção deve ser usada quando chamada de um arquivo de inicialização no momento da inicialização." Muitas das respostas abaixo não incluem, e isso talvez seja parte do problema em fazer as coisas funcionarem. Considere que a sinalização '-B' menciona que os deslocamentos acima de 128 ms podem levar horas para serem sincronizados usando o mecanismo padrão 'slew' - Matt S.
Não há necessidade de usar sudo em arquivos /etc/rc.locale .. eles já são executados como root. - Soren A


Respostas:


Provavelmente o ntp o serviço está funcionando, é por isso ntpdate Não é possível abrir o soquete (porta 123 UDP) e conectar-se ao servidor ntp.

Tente na linha de comando:

sudo service ntp stop
sudo ntpdate -s time.nist.gov
sudo service ntp start

Se você quiser colocar isso em /etc/rc.local use o seguinte:

( /etc/init.d/ntp stop
until ping -nq -c3 8.8.8.8; do
   echo "Waiting for network..."
done
ntpdate -s time.nist.gov
/etc/init.d/ntp start )&

285
2018-02-13 23:13



Obrigado. Você pode por favor explicar por que você precisa dos caminhos explícitos? - ysap
Eu realmente não sei. :-) Eu tive problemas uma vez tentando correr service de rc.local e cron, mas eu consegui consertá-lo usando /etc/init.d/xxx. Na verdade eu acho que você não tem que dar o caminho completo para ntpdateEu gosto de usar caminhos completos em scripts apenas para ter certeza de que o arquivo certo será encontrado. - Eric Carvalho
OK, isso aparentemente era o problema. Agora o relógio está sendo atualizado assim que a conexão de rede é estabelecida. Obrigado. - ysap
Eu descobri que o us.pool.ntp.org é mais responsivo. - ysap
Com o -u opção, você não precisa parar o serviço ntp: sudo ntpdate -u time.nist.gov - Edward Anderson


Em vez de ntpdate (que é descontinuada), usar

sudo service ntp stop
sudo ntpd -gq
sudo service ntp start

o -gq diz ao daemon ntp para corrigir o tempo, independentemente do deslocamento (g) e sair imediatamente (q) depois de definir a hora.


429
2018-02-14 12:32



Obrigado. Ainda mostrando 1970 após esse comando (w / sudo). Leitura ntpd manpage, não tenho certeza de como isso força uma atualização? - ysap
A opção "-q" diz ao daemon NTP para iniciar, definir a hora e sair imediatamente. A opção "-g" permite corrigir as diferenças de tempo maiores que 1000 seg. Por um longo prazo, você deve simplesmente configurar o daemon NTP para ser executado sempre. - tgharold
Esta resposta deve ir para o topo, porque está correto: ntpdate está obsoleto e instalá-lo é uma má idéia, porque entra em conflito com o ntp. Se o relógio estiver desligado, você precisa fazer este passo manual porque senão o ntp não mudará seu relógio e não lhe dirá o porquê. - Liam
Para mim, sudo ntpd -gq não sai! Eu estou no 14.10 e eu tenho que CTRL + C para continuar ... ou quanto tempo é preciso para levar? - Yanick Rochon
FYI, no meu sistema (CentOS 6.6), eu precisava mudar as duas instâncias de sudo service ntp... para sudo service ntpd.... - rinogo


Use sntp para definir a hora imediatamente. Por exemplo:

sudo sntp -s 24.56.178.140

Os números após -s podem ser qualquer servidor de tempo ntp, esse é o NIST em Ft. Collins, Colorado.


50
2017-11-08 01:00



Isso funcionou! +1 - CappY
Isso funcionou quando "sudo ntpd -gq" não funcionou. - Matt White
Não sei quantas vezes cheguei procurando por essa resposta. Trabalha sempre. - Chaos
incapaz de localizar o pacote sntp? - temple
apt-get instalar sntp / yum install sntp (sim funciona também no CentOS, RedHat, fedore) - ndemou


Como outros apontaram, a melhor solução é instruir o ntpd a ignorar o limite de pânico, que é de 1000 segundos por padrão. Você pode configurar o limite de pânico de duas maneiras:

  • editar /etc/default/ntp e assegure-se de que a opção -g esteja presente.
  • edite /etc/ntp.conf e coloque tinker panic 0 no topo

Até agora isso é essencialmente o que outros recomendaram, mas há mais um passo que eu acho que você deve tomar. Instale o programa de hwclock falso:

# apt-get install fake-hwclock


fake-hwclock: Save/restore system clock on machines without working RTC hardware

 Some machines don't have a working realtime clock (RTC) unit, or no
 driver for the hardware that does exist. fake-hwclock is a simple set
 of scripts to save the kernel's current clock periodically (including
 at shutdown) and restore it at boot so that the system clock keeps at
 least close to realtime. This will stop some of the problems that may
 be caused by a system believing it has travelled in time back to
 1970, such as needing to perform filesystem checks at every boot.

 On top of this, use of NTP is still recommended to deal with the fake
 clock "drifting" while the hardware is halted or rebooting.

Com o hwclock falso instalado, sua máquina não iniciará, pensando que é 1970 novamente. Quando a sua máquina inicializa, ela ajustará seu relógio para o timestamp fake-hwclock escrito durante a última reinicialização / desligamento. Isso significa que você pode ter um relógio um pouco correto caso haja problemas de rede ao inicializar.


37
2018-04-03 22:11



-g parecia não fazer nada para mim (na linha de comando, eu não tenho /etc/default/ntp), mas adicionando tinker panic 0 para ntp.conf trabalhado - Dave Cousineau
@Sahuagin Eu não sei o que te dizer além de você ter um pacote ntp não padrão. / etc / default / ntp faz parte do pacote do Ubuntu: packages.ubuntu.com/xenial/amd64/ntp/filelist e -g tem sido uma opção desde que me lembro. - dfc
desculpe, eu acho que não estou realmente no Ubuntu e deveria ter pensado um pouco mais antes de comentar. tinker panic 0 definitivamente parece ter funcionado. - Dave Cousineau


O ntpdate é um programa diferente do net dameon. É provável que o NTPDate esteja causando erros na inicialização porque o ntpd está em execução nesse soquete.

Na linha de comando, execute

# sudo service ntp stop ; sudo ntpdate -s time.nist.gov ; sudo service ntp start

Você também pode desinstalar o ntpd todos juntos (apt-get remove ntp) e adicionar um cron script para usar o ntpdate a cada hora.

ATUALIZAR

O serviço ntp provavelmente não terá um valor significativo para você neste sistema, portanto, remova-o primeiro.

# sudo apt-get remove ntp

Agora adicione o comando:

ntpdate -sb time.nist.gov

para /etc/rclocal 

Reinicie. Deve ser bom nesse ponto.


12
2018-02-13 23:07



resposta atualizada. - Stephan
O ntpdate não está sendo eliminado ou algo assim? Além disso, se eu entendi isso corretamente, o serviço é executado e mantém a sincronização do relógio local para o relógio do servidor - assim, o desvio é ligado. Se você remover o ntp e executar o ntpdate uma vez, ele não será afetado pelo desvio do relógio quando a máquina estiver ligada por períodos prolongados? - ysap
Stephan, por favor, veja a atualização # 2 da questão. - ysap
Sim, o ntpdate está sendo desativado. A utilização de "ntpd -q" é preferida (ambas as variantes requerem que o ntpd seja parado primeiro). - tgharold


rdate -s tick.greyware.com

se tudo que você quer fazer é acertar o relógio uma vez, simples


8
2018-02-26 22:57



Obrigado. Atualmente, não tenho o sistema para verificar este comando, mas se você seguir a discussão na pergunta e a resposta aceita, verá que o problema era, na verdade, a indisponibilidade da rede no momento da execução do comando de atualização do relógio. - ysap
Isso corrigiu um problema de sincronização no meu Raspberry Pi. Obrigado. - Oliver Spryn


A maneira correta de fazer isso em um sistema Debian / Mint / Ubuntu (ou outro derivado Debian) é ter a linha

NTPD_OPTS="-g"

no arquivo

/etc/default/ntp

Isso garante que, quando o ntpd for iniciado a partir do script /etc/init.d/ntp, ele seja executado com a opção "-g",

 start-stop-daemon --start --quiet --oknodo --pidfile /var/run/ntpd.pid --startas /usr/sbin/ntpd -- -p /var/run/ntpd.pid -g -u 124:128

para permitir que o ntpd corrija a hora do sistema quando estiver a mais de 1000 s de saída, por exemplo, quando a hora do sistema é 1 de janeiro de 1970 na inicialização porque não há RTC de hardware.


7
2018-04-03 11:20



Eu já tenho isso, mas ainda diz 3AM em NY, quando deveria ser 11pm. - chovy
Eu também já tinha exatamente essa linha /etc/default/ntp, mas o tempo não foi sincronizado. - Dawid Ferenczy


Tente usar o -b opção para acelerar o tempo.


4
2018-02-13 22:18



Ao tentar a partir da linha de comando, recebo a seguinte resposta: 1 Jan 00:04:11 ntpdate[2226]: the NTP socket is in use, exiting . No entanto, acho que tentei isso antes em rc.local mas isso não ajudou. - ysap
Você precisa parar o serviço ntp antes de poder executar ntpdate -b <ipaddress> - Wim Deblauwe


tlsdate define o relógio local conectando-se com TLS com segurança a servidores remotos e extraindo o tempo remoto do aperto de mão seguro. Ao contrário ntpdate, tlsdate usa TCP, por exemplo, conectando-se a um HTTPS remoto ou TLS  serviço habilitado e fornece alguma proteção contra os adversários que tentam  Alimente-o com informações de horário mal-intencionado.

$ tlsdate -V -n -H encrypted.google.com

4
2018-02-23 11:52





https://help.ubuntu.com/lts/serverguide/NTP.html#timedatectl

use timedatectl para definir a hora, O ntp está obsoleto.


3
2017-11-29 08:57





Os algoritmos ntpd descartam deslocamentos de amostra que excedam 128 ms, a menos que o intervalo durante o qual nenhum [valor absoluto de] deslocamento de amostra seja menor que 128 ms exceda 900s. A primeira amostra depois disso, não importa o deslocamento, avança o relógio para a hora indicada. Na prática, isso reduz a taxa de falsos alarmes, quando o relógio é pisado com erro para uma incidência extremamente baixa.

Normalmente, o ntpd sai se o deslocamento exceder o limite de sanidade, que é 1000 s por padrão. Isso pode ser desativado com a opção -g:

-g     Normalmente, o ntpd sai se o deslocamento exceder o limite de sanidade, que é 1000 s por padrão. Se o limite de sanidade é definido como zero, nenhuma verificação de sanidade é executada e qualquer desvio é aceitável. Esta opção sobrescreve o limite e permite que o tempo seja definido para qualquer valor sem restrição; no entanto, isso pode acontecer apenas uma vez. Depois disso, o ntpd sairá se o limite for excedido. Esta opção pode ser usada com a opção -q.

ambos de http://doc.ntp.org/4.1.0/ntpd.htm

-Jonathan Natale


1
2018-01-28 21:26