Existe um mecanismo existente que sincronize um sistema linux com o NTP enquanto estiver online e com um RTC à deriva previsível enquanto estiver offline?
Operamos "coletores" remotos: sistemas Linux incorporados que coletam e registram os dados dos sensores com data e hora. Precisamos que seus erros de relógio permaneçam razoavelmente pequenos, digamos, abaixo de 5 segundos. Normalmente, usamos o NTP para sincronizar seus relógios, e isso funciona bem - desde que o sistema esteja online.
O problema é que alguns colecionadores têm uplinks muito ruins, que podem cair por horas, dias ou até semanas. Isso não interrompe a coleta de dados local, mas sem o NTP, o relógio do sistema Linux varia muito e de forma imprevisível.
OTOH, o RTC do hardware também varia muito, mas a uma taxa constante. A taxa de desvio do RTC varia de placa para placa, mas é constante por placa e pode ser medida.
Acho que precisamos de um mecanismo que faça o seguinte:
- Meça a taxa de desvio RTC de uma placa antes de sua implantação
- Ajuste a hora do sistema em andamento / regularmente via NTP, quando possível
- Ajuste a hora do sistema regularmente do RTC quando o NTP não estiver disponível. Leve em consideração a taxa de desvio RTC conhecida.
- Opcional: meça e registre a taxa de desvio do RTC em andamento enquanto estiver on-line (1)
Com 'mecanismo', quero dizer algum software e / ou configuração documentado e bem conservado que pode lidar com os dois estados "online" e "offline", verifique se o relógio do sistema está sincronizado com a fonte de tempo correta (ntp vs. rtc), detecte a mudança de estado e corrija a deriva do RTC. Não importa muito se ele é implementado como uma configuração / plug-in especial do ntpd, como um daemon separado, como um trabalho cron, ou então.
Dei uma olhada no Chrony , mas de acordo com a documentação dele , ele tenta prever o desvio do relógio do sistema , que no nosso caso varia muito mais imprevisivelmente do que o RTC. Chrony parece usar o RTC apenas para manter o tempo durante as reinicializações.
(1) Nota: o ntpd ativa o modo '11 minutos 'do kernel (atualize o rtc do relógio do sistema a cada 11 minutos). Parece não haver maneiras com os kernels atuais e o ntpd para impedir o modo de 11 minutos. Portanto, qualquer informação de desvio de rtc é perdida enquanto o ntpd está em execução (thx @billthor).
Atualizações / edições:
- Estamos considerando adicionar um relógio de rádio externo para o sinal MSF ou DCF77 (estamos sediados na Europa) via USB ou Serial. Mas preferimos manter o hardware enxuto.
- Nossos colecionadores estão localizados dentro de casa, geralmente no porão. Portanto, adicionar relógios GPS não ajudará.
- Usamos o Debian 7. Isso significa hwclock do util-linux-2.20.1, ntpdate-4.2.6p5, ntpd do ntp-4.2.6.p5, chrony-1.24 (potencialmente 1.30).
- Note-se que o nosso problema não é que não sabemos como usar
ntpdate(8)
,hwclock(8)
,date(1)
, etc. Por favor, consulte a seção adicionados em itálico sobre o que eu quero dizer com 'mecanismo'. - Nota de rodapé adicionada sobre o 'modo 11 minutos'
- Aqui está uma discussão muito interessante sobre sincronização offline e desvio do RTC