
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á reboot
o 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 --systohc
sincroniza 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 time
linha 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/adjtime
como@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.