Como faço para sincronizar permanentemente o relógio do sistema com o relógio do hardware?

2

Eu tenho um cronjob em execução que verifica as atualizações do servidor, instala-as uma a uma e, em seguida, verifica se uma reinicialização é necessária. Se uma reinicialização for necessária, o script será reboot do 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á uma hora atrás, quando o servidor alterna de hardware para relógio do sistema, os logs saltam e uma hora à frente, o que aciona o daemon do cron, ele notou que o tempo já passou para o script de atualização do servidor e o executa novamente.

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

Excecuting hwclock --systohc sincroniza o relógio do sistema com o relógio do hardware, mas não é permanente. Após a reinicialização, a diferença de horário é desativada novamente.

Minhas perguntas são

How do I permanently sync the system clock with the hardware clock?

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 release 7.5.1804 (Core)
    • Este é um servidor VPS.
  • Europa / Amsterdã
por blade19899 28.08.2018 / 10:28

1 resposta

4

De acordo com o seu timedatectl status :

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

Como resultado, na inicialização, o relógio do sistema é definido com uma hora de atraso (seu fuso horário sem o horário de verão).

De man hwclock :

POSIX systems, like Linux, are designed to have the System Clock operate in the UTC timescale.

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 RTC time line não possui indicação TZ. Quando você mantém o tempo em uma peça de hardware e o TZ em um arquivo ( /etc/adjtime como @ mr.spuratic anotado), é fácil perder a sincronização entre as duas informações.

Por questão de integridade, IMHO, a única situação na qual manter o relógio do hardware configurado para local é uma máquina de inicialização dupla com Windows .

    
por 28.08.2018 / 12:24