Como eu personalizo a taxa de pesquisa NTP?

17

Estou configurando o Ubuntu em uma máquina incorporada que é executada em uma conexão de celular, onde pagamos por byte. A máquina também não tem bateria RTC, por isso começa a partir de um tempo aleatório a cada inicialização.

Gostaria de garantir que o horário seja sincronizado quando a conexão do celular estiver disponível para que as mensagens de log, etc. tenham tempos reais, mas também não quero pagar um braço e uma perna pelo tráfego do NTP.

Posso personalizar a taxa na qual o NTP atualiza a hora? Estou usando o openntpd atualmente, mas não estou comprometido com isso.

A internet não está necessariamente na inicialização, então o update e os relacionados na inicialização não funcionarão. E agendar via cron significa esperar que a tarefa agendada seja ativada, enquanto eu quero um daemon de tempo para obter uma sincronização de horário o mais rápido possível.

    
por David Pfeffer 16.05.2012 / 00:57

8 respostas

5

Algumas dessas respostas podem ganhar o concurso de configuração ntp ofuscado.

Use a implementação de referência ntp e use iburst para definir a hora rapidamente na inicialização. Depois disso, você pode usar a diretiva minpoll para limitar a frequência com que o ntpd consulta os servidores de tempo remotos. Isso permitirá que você aproveite a disciplina do clock do ntpd e mantenha a largura de banda baixa.

minpoll minpoll
maxpoll maxpoll
    These options specify the minimum and maximum poll intervals for NTP 
    messages, in seconds as a power of two. The maximum poll interval 
    defaults to 10 (1024 s), but can be increased by the maxpoll option to 
    an upper limit of 17 (36 h). The minimum poll interval defaults to 6 (64 s), 
    but can be decreased by the minpoll option to a lower limit of 3 (8 s).

Chrony é uma boa alternativa à implementação da referência ntp. Openntpd não é.

    
por dfc 18.01.2014 / 01:02
7

Minha experiência é com o ntp em vez do openntpd.

Você deve saber que o protocolo NTP geralmente começa com o envio de pacotes a cada minuto (64 segundos), mas geralmente se instala enviando e recebendo um pacote a cada 17 minutos para cada servidor que você possui em seu arquivo /etc/ntp.conf. Interrupções de rede ou um relógio instável em seu dispositivo podem aumentar isso, no entanto. Cada pacote tem uma carga útil de cerca de 68 bytes, então é provavelmente um pouco mais de 100 bytes, em cada sentido, por pesquisa.

O rdate e o ntpdate no tempo de atividade da rede são boas ideias para definir a hora. E se isso é tudo que você precisa, deve funcionar bem para você.

Se você precisar manter o tempo em sincronia por um longo tempo, o protocolo ntp foi projetado para isso. O relógio do seu dispositivo funcionará um pouco rápido ou lento, dependendo de quão quente ou frio ele ficar, mesmo que ele provavelmente tenha um relógio controlado por cristal - e a marcação de hora em andamento serve para se ajustar a isso.

Aqui estão algumas sugestões se você precisar de cronometragem contínua e desejar reduzir a largura de banda usada. Eles se referem a itens no ntp.conf.

Não use iburst. (Mas levará mais tempo para definir a hora inicialmente).

Aumenta o minpoll de 6 (2 ^ 6 segundos é 64 segundos). Isso reduz o tráfego quando o protocolo é iniciado após a conexão da rede.

Aumente o maxpoll para cima de 10 (2 ^ 10 segundos é 1024 segundos ou a cada 17 minutos. Você pode ir até 17 para pesquisar a cada 36 horas. Eu não tentei isso sozinho.

Use apenas um número mínimo de servidores, se você tivesse um que pudesse ser acessado de maneira confiável a partir de seus dispositivos incorporados, isso seria ótimo. Quanto mais servidores, mais confiável a marcação do tempo pode ser, mas o tráfego aumenta, então é uma troca.

    
por John S Gruber 16.05.2012 / 18:05
4

Você pode fazer alguma invasão envolvendo a execução do ntpdate quando a interface da célula aparecer. Mas se você puder, instalar o chrony seria uma alternativa melhor, já que foi criado com acesso à rede intermitente em mente .

    
por tm23 16.05.2012 / 03:13
3

Em uma instalação padrão do Ubuntu, o daemon NTP não é executado. Em vez disso, o tempo é definido toda vez que uma interface de rede é ativada pelo /etc/network/if-up.d/ntpdate hook.

Se você estiver após a sincronização pontual em vez da sincronização constante, isso poderá ser suficiente para você.

Você pode controlar quais servidores são consultados para definir a hora pelo arquivo /etc/ntp.conf padrão ou pela variável NTPSERVERS em /etc/default/ntpdate .

    
por James Henstridge 16.05.2012 / 05:20
2

Você precisa da sincronização exata e precisa que o ntp fornece? Se não, você pode conseguir usar rdate ou ntpdate na inicialização e depois periodicamente via cron.

    
por Pridkett 16.05.2012 / 01:48
2

Você provavelmente já leu a página de manual do openntpd.

link

Você provavelmente já percebeu a falta de uma opção de pesquisa por tempo.

Eu tenho esses hacks possíveis para propor:

  1. Não use nenhum ntpd apenas chame ntpdate via cron.
  2. Use cron e / ou seus scripts de conexão celular para alternar as regras do iptables para descartar ou permitir o tráfego da porta 123 quando quiser permitir isso. Isso pode ser tão simples quanto

    0 12 * * * iptables -D OUTPUT -j DROP -p udp --dport 123 # at noon start allowing ntp

    0 13 * * * iptables -A OUTPUT -j DROP -p udp --dport 123 # at 1pm stop allowing ntp

  3. Incorpore um receptor de relógio de rádio em sua máquina incorporada. Eu não sei quase nada sobre isso, mas produtos como este:

faça-me pensar que não é difícil se você puder receber o sinal de rádio.

    
por Jay _silly_evarlast_ Wren 16.05.2012 / 01:25
1

Se bem me lembro, o intervalo de pesquisa ntp pode ser definido para um máximo de 1024 segundos. Talvez a solução mais simples seja executar o ntpdate em cada inicialização e mais tarde, de vez em quando, a partir do crontab.

Se o seu relógio começar com um tempo aleatório em cada inicialização, provavelmente você não poderá executar o ntpd de qualquer maneira e terá que usar o ntpdate primeiro. O Ntpd se recusa a sincronizar o tempo se a diferença for muito grande entre o relógio e o clock do servidor.

    
por BigWhale 16.05.2012 / 01:19
1

O NTP, como o TCP, tem alguma Teoria profunda e experiência prática incorporadas ao protocolo; Se você alterar seus parâmetros fundamentais, ele deixará de ter as propriedades de sincronização para as quais foi projetado.

Se o seu dispositivo estiver esporadicamente ligado, talvez o RDATE melhor o sirva. Ele não lida com o giro do relógio, nem com a média dos pares, nem pode ser protegido contra vários hacks sutis que um homem do meio poderia jogar se valesse a pena. Apenas obtém uma data de referência de um servidor remoto e atinge o relógio local com um martelo. Mas isso acontece quando você quer e seu comportamento é determinista.

A precisão do RDATE é muito pior do que o NTP, eu não confiaria nele por mais de ± 1 segundo, mas se você está apenas esporadicamente conectado, um timing mais preciso não é relevante; de fato, de acordo com a relatividade , pode até não ser significativo.

    
por msw 16.05.2012 / 13:53

Tags