Forzar systemd timesyncd para sincronizar la hora con el servidor NTP inmediatamente

16

He configurado systemd timesyncd para obtener su hora de un servidor NTP:

/etc/systemd/timesyncd.conf > NTP=ca.pool.ntp.org
systemctl restart systemd-timesyncd.service 
timedatectl set-ntp true

El estado es el siguiente:

$ timedatectl status
...
Network time on: yes
NTP synchronized: no

Como la salida implica, el tiempo aún no está sincronizado. ¿Puede alguien ayudarme con las siguientes preguntas?

  • ¿Cuánto tiempo llevará sincronizar Timesyncd con el NTP? A qué intervalos hace eso, ¿dónde puedo verificarlos y modificarlos?
  • En casos urgentes: ¿Puedo configurar la hora manualmente o puedo forzar la sincronización temporal para que se sincronice inmediatamente con el servidor NTP?
manifestante
fuente

Respuestas:

10

Para usar una implementación NTP real, necesita instalar y configurar una, chronyo tal vez ntpd. Hágalo si necesita alguna supervisión del rendimiento del tiempo. Asumiré Chrony.

Agregue ibursta su poolo server líneas en su configuración para acelerar los pocos paquetes iniciales. Todavía puede tomar un par de minutos estabilizarse, tenga paciencia.

chronyc trackingmostrará el desplazamiento actual. Tenga una idea de cuáles son sus requisitos, una precisión de un segundo puede tolerar fácilmente el desplazamiento de decenas de milisegundos.

chronyc makesteprealizará el ajuste actual de inmediato. No es necesario por lo general.


timesyncdes un cliente SNTP que puede establecer el tiempo, pero no disciplinarlo de forma gradual y continua, ni filtrar el servidor NTP remoto en función de la calidad . (Tampoco puede hablar con hardware de tiempo o PTP, solo protocolo NTP). Un poco mejor que repetido ntpdate, con lo que quiero decir que no es muy buen reloj. Personalmente, lo reemplazo en la mayoría de los servidores.

Sobre la única manera de establecer el tiempo con timesyncd es de forma manual: timedatectl set-time "2019-01-15 00:40:16". No tiene medios robustos para disciplinar y controlar el reloj. Las estadísticas básicas de NTP vía timedatectl timesync-statusson algo relativamente nuevo, no creo que esa opción esté disponible en Red Hat 7 o Ubuntu 18.04.

systemd define "sincronizado" para ser si NTP alguna vez se usó para decirle a Linux que ajuste el reloj. Específicamente, si la llamada de disciplina del núcleo adjtimex () regresó sin error, y no el estado inicial. Consulte el código fuente, systemd / src / basic / time-util.c.

John Mahowald
fuente
Gracias por tu respuesta, John. Entonces, ¿puedo deshabilitar systemd-timesyncd y usar solo chrony? No estoy seguro de entender por qué systemd tiene una opción NTP y se llama timeSYNCd si no puede sincronizar la hora en realidad. “Systemd define" sincronizado "para que sea si la llamada de disciplina de núcleo NTP adjtimex () regresó sin error, y no el estado inicial" - esto no es muy claro para mí.
manifiesto
1
@chevallier systemd-timesyncd es muy simple y es lo suficientemente bueno para los casos más comunes, por ejemplo, un servidor con un reloj de tiempo real que se espera que se ejecute y en la red 24x7. El suyo no es un caso común, por lo que probablemente no debería usarlo. chrony es mucho mejor para lidiar con las interrupciones de la conectividad de la red y estar apagado durante períodos prolongados (por ejemplo, una computadora portátil) o no tener un RTC (por ejemplo, dispositivos integrados).
Michael Hampton
1
timesyncd es un cliente SNTP, por lo que establece el tiempo sin disciplinarlo adecuadamente. Lo cual está bien para los requisitos de precisión gruesa. Si desea medir el rendimiento del tiempo o esperar hasta que se sincronice, use un NTP completo como chrony o ntpd.
John Mahowald
11

Sin instalar más paquetes ... Apague NTP, configure manualmente el tiempo para estar lo suficientemente cerca , vuelva a encender NTP:

Establecer servicio NTP inactivo

$ timedatectl set-ntp false

Establecer la hora manualmente

Sí, eso es triste, pero funciona y no necesitas perder el tiempo instalando nada y hacerlo funcionar. Obtenga el tiempo LOCAL aproximado del reloj de pared, su teléfono, Internet. No necesita ser perfecto porque volveremos a activar ntp en un momento ...

$ sudo timedatectl set-time "2019-06-22 13:41:00"

Establecer servicio NTP activo

$ sudo timedatectl set-ntp true

Espere

john@mybox:~$ timedatectl
               Local time: Sat 2019-06-22 13:49:53 AEST
           Universal time: Sat 2019-06-22 03:49:53 UTC
                 RTC time: Sat 2019-06-22 03:49:54
                Time zone: Australia/Sydney (AEST, +1000)
System clock synchronized: no
              NTP service: active
          RTC in local TZ: no

El "Reloj del sistema sincronizado: no" se convertirá en "sí" cuando se haya ajustado lo suficiente como para considerarse "sincronizado".

Solución de problemas

$ cat /etc/systemd/timesyncd.conf
[Time]
NTP=pool.ntp.org

$ timedatectl timesync-status
       Server: 13.210.208.89 (au.pool.ntp.org)
Poll interval: 8min 32s (min: 32s; max 34min 8s)
 Packet count: 0

$ grep systemd-timesyncd /var/log/syslog | tail
Jun 22 14:13:09 meebox systemd-timesyncd[8333]: Timed out waiting for reply from 103.214.220.220:123 (au.pool.ntp.org).

El firewall corporativo estaba bloqueando mis paquetes ntp.

John Mee
fuente
Instalar otro servicio de sincronización horaria también fue mi primera idea, pero eso es solo una solución. Estaba buscando una solución real. Esa es tu respuesta. Funciona. Gracias :-)
Ingo