el sistema Linux salta temporalmente

8

Vi un comportamiento extraño que cambia el tiempo del sistema en algunos servidores (hardware): en / var / logs / syslog, la fecha y hora que precede a cada mensaje de registro a veces cambia a uno aleatorio y vuelve a la normalidad en el siguiente mensaje, como el siguiente:

22 de febrero de 2018 09:09:30 ...
22 de febrero de 2018 09:09:32 ...
13 de enero 2610 15:37:42 ...
22 de febrero de 2018 09:09:33 ...
22 de febrero de 2018 09:09:34 ...

Como en el ejemplo, el cambio repentino de fecha y hora puede estar a cientos de años de distancia.

Puedo confirmar que los mensajes de registro que tienen marcas de tiempo extrañas no provienen de ningún proceso específico, solo pueden suceder aleatoriamente para cada uno.

Y la duración entre 2 cambios de tiempo anormales varía entre unos minutos y unas pocas horas (sin embargo, sospecho que los cambios de tiempo anormales podrían ocurrir con mayor frecuencia, pero muchos de ellos no se revelan en el registro del sistema, ya que no está escribiendo registros por segundo).

Además, dado que ocurre en más de un servidor, supongo que no es un problema de hardware.

Más información sobre los servidores: son una instalación de taladro abierto con un controlador y algunos nodos de cómputo. Cada servidor tiene un servicio ntp ejecutándose. El controlador está configurado para tomar tiempo de su propio reloj de hardware, y los servidores de nodo de cómputo sincronizan el tiempo del controlador. Tenga en cuenta que cada servidor tiene cambios de hora anormales a su propio ritmo; parece que el "momento incorrecto" no está sincronizado desde el controlador a través de ntp.

Sospechaba que los sistemas invitados (máquinas virtuales) en los nodos de cómputo podrían afectar la hora de su sistema host. Pero esto no puede explicar por qué el controlador tiene el mismo problema mientras no ejecuta ninguna máquina virtual.

Necesito un método para detectar: ​​¿quién cambió la hora del sistema y cómo sucede?

Zhaohui Yang
fuente
2
¿Puedes mostrar la salida de un hwclockbucle? Algo como:while true; do hwclock; sleep 5; done
shodanshok
cada servidor tiene un servicio ntp ejecutándose: como cliente o como servidor? a través de systemd o fuera de systemd a través del servicio ntp "antiguo"? Para mí, esto parece un problema de tiempo ntp. tuvimos este problema que escribimos archivos de registro antes de que nuestro tiempo se sincronizara (antes de tener conectividad de red, lo que da como resultado saltos de marcas de tiempo) systemd tiene un objetivo en el que puede confiar en systemd [1]: La hora ha cambiado systemd [1]: Tiempo de sistema objetivo alcanzado Sincronizado.
Dennis Nolte
parece que alguna recuperación de fecha se está ejecutando como cron y no tiene muy buen tiempo para verificar. Encuéntrelo, quítelo y reemplácelo con ntpd que no responde a grandes desviaciones de tiempo.
danblack
Tenemos nuevos hallazgos y descubrimos que el problema puede reducirse a mensajes CRON que se retrasan en syslog. Entonces publiqué otra pregunta . Por favor, eche un vistazo allí.
Zhaohui Yang el
3
Tal vez este sea su error: saltos de tiempo inexplicables en CRON fue parcheado en rsyslog - 7.4.4-1ubuntu2.7 .
Stone

Respuestas:

1

Este script le indicará cuándo se produce un cambio de tiempo y la diferencia en el árbol de procesos, y esto debería ayudar a identificar esto si es causado por un proceso que cambia la hora del sistema. Se imprimirá en el terminal y se registrará en timedrift.log dentro del directorio de trabajo actual.

#!/bin/bash

oldTime="$(date +%s)"
oldPsOutput="$(ps faux)"
while true; do
  sleep 1;
  currentTime="$(date +%s)"
  oldTimeplusfive="$((($oldTime+5)))"
  currentPsOutput="$(ps faux)"
  if [[ "$currentTime" -lt "$oldTime" ||  "$currentTime" -gt "$oldTimeplusfive"  ]]
  then
    (
        echo -e '\n\n======================='
        echo "currentTime=$currentTime oldTime=$oldTime oldTimeplusfive=$oldTimeplusfive"
        echo '-----------------------'
        echo "$oldPsOutput"
        echo '::::::::::::::::::::::::::'
        echo "$currentPsOutput"
    ) | tee -a timedrift.log
  fi
  oldPsOutput=$currentPsOutput
  oldTime=$currentTime
done

El crédito al guión original en los saltos de tiempo inexplicables en el error CRON que Stone mencionó como comentario.

¿También puede comentar como si estuviera utilizando rsyslog y, de ser así, qué versión? ¿Lo ve fuera del ámbito de rsyslog (es decir, registros de apache, etc.). Este error parece simmlar, y sería bueno confirmarlo o descartarlo de cualquier manera.

Ciudadano Kepler
fuente
0

En realidad, este es un duplicado del comentario de @Stone. Simplemente deje en claro a todos que esto tiene una respuesta.

En resumen, hay un error en la versión de rsyslog que estoy usando. Lo que retrasará el mensaje de syslog que recibió durante un período de tiempo arbitrario. Informe de error está aquí. Y actualizar rsyslog resolvió el problema. No es culpa del núcleo o de CRON.

Zhaohui Yang
fuente