Outils pour utilisateurs

Outils du site


sysadmin:linux:systemd:synchronisation-du-temps

Systemd: Synchronisation du temps

systemd intègre un service de synchronisation du temps local via un client sntp (unité timesyncd). Le client possède peu d'options de paramétrages, il est simple à mettre en œuvre. Il fonctionnera très bien sur un hôte relié en permanence au réseau (comme un serveur ou une station de travail régulièrement connecté). Cependant sur des hôtes connectés occasionnellement, d'autres programmes comme chrony pourraient être mieux adaptés.

Pour afficher l'état:

timedatectl status

Configuration

Pour configurer le serveur ou du pool de référence, modifier le fichier de configuration /etc/systemd/timesyncd.conf. Dans la section [TIME] définir la variable NTP avec l'IP ou l'URL du serveur:

[Time]
NTP=ntp.localdomain

Redémarrer le service pour prendre en compte les modifications:

systemctl restart systemd-timesyncd.service 

Une fois l' unité activée, le temps local va se synchroniser graduellement avec le serveur de référence. Si toutefois la dérive est trop importante il faudra:

  • Arrêter le service
  • Définir manuellement le temps local au plus proche de la référence
  • redémarre le service

Définir manuellement le temps

Arrêter le service:

timedatectl set-ntp false

Définir le temps local manuellement:

timedatectl set-time "2020-05-27 18:13:00"

Redémarrer le service

timedatectl set-ntp true

Vérifier l'état de la synchronisation via journalctl et timedatectl

journalctl -u systemd-timesyncd.service

Des détails concernant la synchronisation via NTP peuvent être affichés via l'option show-timesync

timedatectl show-timesync

Afficher le status global en invoquant la commande timedatectl sans arguments (équivalent de timedatectl status):

timedatectl 
                      Local time: mer. 2020-05-27 18:14:04 CEST
                  Universal time: mer. 2020-05-27 16:14:04 UTC
                        RTC time: mer. 2020-05-27 16:14:04
                       Time zone: Europe/Paris (CEST, +0200)
       System clock synchronized: yes
systemd-timesyncd.service active: yes
                 RTC in local TZ: no

Sur le résultat on peut lire que la “Time Zone” est bien configurée, le temps local est correct, l'horloge temps réel (RTC) utilise le temps UTC, le système est synchrone avec le serveur de temps et le service (systemd-timesyncd) est bien actif.

Modifier le temps local (time zone)

Lister les time zones disponibles:

timedatectl list-timezones

A partir de la liste, définir une time zone pour la machine:

timedatectl set-timezone Europe/Paris

A propos de la RTC

La RTC pour Real Time Clock est l'horloge matérielle, le composant spécialisé qui fournit le temps au système local. Les différents systèmes d'exploitation ne la configurent pas de la même manière:

  • *nix définissent la RTC au temps Zulu
  • Windows définissent la RTC au temps local

La commande timedatectl status produit deux lignes indiquant comment est configurée la RTC:

               Local time: lun. 2021-06-28 11:15:09 CEST
           Universal time: lun. 2021-06-28 09:15:09 UTC 
                 RTC time: lun. 2021-06-28 09:15:09     
                Time zone: Europe/Paris (CEST, +0200)   
System clock synchronized: yes                          
              NTP service: active                       
          RTC in local TZ: no

La dernière ligne RTC in local TZ: no est la valeur normale par défaut, elle indique bien que la RTC n'est pas configurée sur le temps local (fuseau Europe/Paris). Dans cet exemple la RTC vaut 09:15:09 (3ième ligne) ce qui correspond bien au temps UTC ou temps Zulu.

L'horloge temps réel peut être configurée pour utiliser le temps local:

timedatectl set-local-rtc 1

Autrement, la commande suivante permet de définir le temps UTC comme référence pour l'horloge temps réel:

timedatectl set-local-rtc 0

Dépannage/troubleshooting

Consulter les journaux

Pour consulter les traces du service en temps réel:

journalctl --unit systemd-timesyncd.service --follow

Activer le mode debug

Il est possible d’arrêter le service et de le relancer en mode debug dans la console:

# Arrêt du service
systemctl stop systemd-timesyncd.service
 
# Exécution en mode debug dans le terminal
SYSTEMD_LOG_LEVEL=debug /usr/lib/systemd/systemd-timesyncd

Références

sysadmin/linux/systemd/synchronisation-du-temps.txt · Dernière modification : 2022/05/24 16:44 de yoann