Como sincronizo permanentemente o relógio do sistema com o relógio do hardware?

Como sincronizo permanentemente o relógio do sistema com o relógio do hardware?

Eu tenho um cronjob em execução que verifica atualizações do servidor, instala-as uma por uma e verifica se é necessária uma reinicialização. Se for necessária uma reinicialização, o script será rebooto servidor.

O relógio do hardware é usado no momento da inicialização. Leva um minuto antes que o relógio do sistema seja usado.

Antes da mudança para o relógio do sistema, os logs mostram que o servidor está cerca de uma hora atrasado, quando o servidor muda do hardware para o relógio do sistema, os logs saltam e uma hora ou mais à frente, o que aciona o daemon cron, ele percebeu que o tempo já passou para o script de atualização do servidor e executa-o novamente.

O que desencadeia um loop de reinicialização, porque o script deveria ser executado apenas uma vez por semana.

A execução hwclock --systohcsincroniza o relógio do sistema com o relógio do hardware, mas não é permanente. Após uma reinicialização, a diferença horária desaparece novamente.

Minhas perguntas são

Como sincronizo permanentemente o relógio do sistema com o relógio do hardware?

saída de timedatectl status:

      Local time: Tue 2018-08-28 12:05:37 CEST
  Universal time: Tue 2018-08-28 10:05:37 UTC
        RTC time: Tue 2018-08-28 10:05:37
       Time zone: n/a (CEST, +0200)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: yes
      DST active: yes
 Last DST change: DST began at
                  Sun 2018-03-25 01:59:59 CET
                  Sun 2018-03-25 03:00:00 CEST
 Next DST change: DST ends (the clock jumps one hour backwards) at
                  Sun 2018-10-28 02:59:59 CEST
                  Sun 2018-10-28 02:00:00 CET

Warning: The system is configured to read the RTC time in the local time zone.
         This mode can not be fully supported. It will create various problems
         with time zone changes and daylight saving time adjustments. The RTC
         time is never updated, it relies on external facilities to maintain it.
         If at all possible, use RTC in UTC by calling
         'timedatectl set-local-rtc 0'.

  • CentOS Linux versão 7.5.1804 (núcleo)
    • Este é um servidor VPS.
  • Europa/Amsterdã

Responder1

De acordo com teu timedatectl status:

  • seu relógio de hardware (RTC) está definido para a hora UTC ( RTC time),
  • seu sistema está configurado para avaliar o relógio do hardware como hora local ( RTC in local TZ).

Como resultado, na inicialização, o relógio do sistema está atrasado em uma hora (seu fuso horário sem horário de verão).

De man hwclock:

Os sistemas POSIX, como o Linux, são projetados para que o System Clock opere na escala de tempo UTC.

Você pode corrigi-lo facilmente executando:

timedatectl --adjust-system-clock set-local-rtc 0

A raiz de todo o mal é que o RTC não se lembra do TZ que está definido. Observe que a RTC timelinha não possui indicação de TZ. Quando você mantém a hora em uma peça de hardware e o TZ em um arquivo ( /etc/adjtimecomo@sr.spuraticobservado), é fácil perder a sincronização entre as duas informações.

Para completar, IMHO a única situação em que manter o relógio de hardware definido como local é uma máquina de inicialização dupla comjanelas.

informação relacionada