¿Cómo sincronizo permanentemente el reloj del sistema con el reloj del hardware?

¿Cómo sincronizo permanentemente el reloj del sistema con el reloj del hardware?

Tengo un cronjob en ejecución que busca actualizaciones del servidor, las instala una por una y luego verifica si es necesario reiniciar. Si es necesario reiniciar, el script se ejecutará en rebootel servidor.

El reloj del hardware se usa en el momento del arranque. Toma un minuto antes de que se use el reloj del sistema.

Antes del cambio al reloj del sistema, los registros muestran que el servidor tiene aproximadamente una hora de retraso, cuando el servidor cambia del hardware al reloj del sistema, los registros saltan aproximadamente una hora por delante, lo que activa el demonio cron, notó que Ya ha pasado el tiempo para el script de actualización del servidor y lo ejecuta nuevamente.

Lo que desencadena un ciclo de reinicio, porque el script solo debía ejecutarse una vez por semana.

La ejecución hwclock --systohcsincroniza el reloj del sistema con el reloj del hardware, pero no es permanente. Después de reiniciar, la diferencia horaria vuelve a desaparecer.

mis preguntas son

¿Cómo sincronizo permanentemente el reloj del sistema con el reloj del hardware?

salida 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 versión 7.5.1804 (Núcleo)
    • Este es un servidor VPS.
  • Europa/Ámsterdam

Respuesta1

De acuerdo a tu timedatectl status:

  • el reloj de su hardware (RTC) está configurado en hora UTC ( RTC time),
  • su sistema está configurado para evaluar el reloj de su hardware como hora local ( RTC in local TZ).

Como resultado, al arrancar, el reloj de su sistema se retrasa una hora (su zona horaria sin horario de verano).

De man hwclock:

Los sistemas POSIX, como Linux, están diseñados para que el reloj del sistema funcione en la escala de tiempo UTC.

Puedes corregirlo fácilmente ejecutando:

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

La raíz de todo mal es que RTC no recuerda el TZ que está configurado. Tenga en cuenta que RTC timela línea no tiene indicación TZ. Cuando mantienes la hora en una pieza de hardware y el TZ en un archivo ( /etc/adjtimecomo@mr.spuraticComo se indicó), es fácil perder la sincronización entre ambas informaciones.

Para completar, en mi humilde opinión, la única situación en la que mantener el reloj del hardware configurado en local es una máquina de arranque dual conventanas.

información relacionada