26
octobre
2023
« Synchronisation de l'heure sous Linux : utilisation du service SNTP »
15:45

« Synchronisation de l'heure sous Linux : utilisation du service SNTP »

26 octobre 2023 15:45

Il existe des situations où les capacités d'un service client NTP classique ne suffisent pas : le redémarrage d'un PC sans batterie CMOS en est un exemple. Mauvaise qualité d'Internet - une synchronisation de l'heure peu fréquente ne permet pas au service NTP de fonctionner pleinement. Pour résoudre ce problème, le service systemd-timesyncd a été inventé, qui fonctionne en utilisant le protocole SNTP simplifié - Simple NTP.

Définir le fuseau horaire

(Facultatif) Les fuseaux horaires sont abordés dans l'article "L'heure Linux".

sudo timedatectl set-timezone Europe/Moscou

Méthodes de synchronisation de l'heure

1) Utiliser le client NTP ce qui est discuté dans article- Client NTP complet.

2) Utilisation du service systemd-timesyncd - un client simple SNTP avec synchronisation à l'aide de systemd.
3) d'autres méthodes (je ne considère pas).

Installation du service systemd-timesyncd

sudo apt install systemd-timesyncd

Démarrage du service systemd-timesyncd

sudo systemctl enable systemd-timesyncd.service
sudo systemctl start systemd-timesyncd.service

Activation de la synchronisation de l'heure via le service systemd-timesyncd

Permet la synchronisation de l'heure sur le réseau :

sudo timedatectl set-ntp true

Configuration de la synchronisation automatique de l'heure

Pour que la correction de l'heure se produise automatiquement à des intervalles spécifiés, vous devez corriger le fichier de configuration /etc/systemd/timesyncd.conf:

sudo nano /etc/systemd/timesyncd.conf

[Heure]
NTP=2.ru.pool.ntp.org
FallbackNTP=3.ru.pool.ntp.org
RootDistanceMaxSec=5
Intervalle d'interrogationMinSec=32
PollIntervalMaxSec=2048

Dans cet exemple, l'intervalle d'interrogation du serveur NTP varie de 32 secondes à 34 minutes.

Redémarrage du service systemd-timesyncd :

sudo systemctl restart systemd-timesyncd.service

Vérification de l'état de synchronisation de l'heure

timedatectl status

Si tout va bien, le résultat sera :

Horloge système synchronisée : oui
NTP service: active

Remarque

Les deux méthodes s’excluent mutuellement :
*NTP :* l'installation des packages ntp/sntp supprimera automatiquement le package systemd-timesyncd.
SNTP :** le package ntp n'est pas requis pour que systemd-timesyncd fonctionne.

Il semble que la deuxième méthode, SNTP, soit plus adaptée aux environnements de terrain et aux systèmes embarqués. Puisqu'il conserve le temps entre les redémarrages dans un fichier spécial et à l'aide de modifications, la dérive de l'horloge est prise en compte.

MAN - manuel d'utilisation du service SYSTEMD-TIMESYNCD.SERVICE

SYSTEMD-TIMESYNCD.SERVICE(8) systemd-timesyncd.service SYSTEMD-TIMESYNCD.SERVICE(8)

NOM
systemd-timesyncd.service, systemd-timesyncd — синхронизация времени по сети

SYNOPSIS
systemd-timesyncd.service
/lib/systemd/systemd-timesyncd

DESCRIPTION
systemd-timesyncd est un service système qui peut être utilisé pour synchroniser l'horloge système locale avec un serveur NTP (Network Time Protocol) distant.

Il enregistre également l'heure locale sur le disque à chaque fois que l'horloge est synchronisée et l'utilise pour éventuellement faire avancer l'horloge en temps réel du système lors des redémarrages ultérieurs afin de garantir qu'elle avance (à peu près) de manière monotone, même si le système ne dispose pas d'une puce RTC avec batterie tampon.

Le service systemd-timesyncd implémente uniquement SNTP. Ce service minimaliste incrémentera l'horloge système pour les décalages importants ou l'ajustera lentement pour les décalages plus petits. Les cas d'utilisation complexes qui nécessitent une prise en charge complète de NTP (et où SNTP n'est pas suffisant) ne sont pas couverts par systemd-timesyncd.

L'accès aux serveurs NTP est déterminé en fonction des paramètres globaux dans timesyncd.conf(5), des paramètres statiques par canal dans les fichiers .network et des paramètres dynamiques par canal obtenus via DHCP trouvés dans Informations supplémentaires - voir systemd.network(5).

Équipe timedatectl set-ntp vrai peut être utilisé pour activer et démarrer ou désactiver et arrêter ce service.

Équipes timedatectl timesync-statut et timedatectl show-timesync peut être utilisé pour afficher l’état actuel de ce service.

L'initialisation de Systemd-timesyncd retarde le lancement des modules commandés après time-set.target (voir systemd.special(7) pour plus de détails) jusqu'à ce que l'heure locale soit mise à jour à partir de /var/lib/systemd/timesync/lock (voir ci-dessous). ) pour le rendre à peu près monotone. Il ne retarde pas les autres appareils jusqu'à ce que la synchronisation avec des sources de référence temporelles précises soit obtenue. Pour ce faire, utilisez systemd-time-wait-sync.service(8), qui retardera le lancement des modules commandés après time-sync.target jusqu'à ce que la synchronisation avec une horloge de référence précise soit obtenue.

FICHIERS
/var/lib/systemd/timesync/horloge
L'heure de modification ("mtime") de ce fichier indique l'horodatage de la dernière synchronisation réussie (ou au moins la date de build systemd si la synchronisation n'est pas possible). Il est utilisé pour garantir que l'horloge système reste approximativement monotone lors des redémarrages en l'absence d'horloge locale en temps réel.

/run/systemd/timesync/syncronized
Un fichier qui est touché à chaque synchronisation réussie pour aider systemd-time-wait-sync et d'autres applications à détecter la synchronisation avec une horloge de référence précise.

Comment puis-je connaître la date et l’heure de la dernière synchronisation horaire réussie ?

ls -l /var/lib/systemd/timesync/clock

Démarrage manuel de la synchronisation de l'heure

Il n'est pas nécessaire de synchroniser manuellement l'heure si elle est configurée synchronisation automatique de l'heure via Internet.

Commande de synchronisation manuelle de l'heure :

sudo systemctl restart systemd-timesyncd

 

Pour faciliter la synchronisation manuelle de l'heure, vous pouvez créer un script shell nommé "timesync.sh":

#!/bin/sh
sudo systemctl restart systemd-timesyncd.service
find /var/lib/systemd/timesync/clock -printf "Fichier : %f : Date : %TY-%Tm-%Td - Heure : %TT\n" -exec tail -n5 {} \;
statut timedatectl | grep -e "synchronisé" -e "NTP"

Voici le fichier dans une archive ZIP :
timesync.sh.zip

Enregistrez-le dans le répertoire courant et rendez-le exécutable

sudo chmod +x timesync.sh

Démarrage manuel de la synchronisation de l'heure :

./timesync.sh

(Pour éviter de demander un mot de passe à chaque fois :usermod -aG sudo ваше_имя).

N.-B.: Si l'horloge du PC est synchronisée avec une grande précision, le service écrira : « Horloge système synchronisée : oui », qu'il y ait ou non une connexion au réseau au moment de la requête au serveur NTP.

Quelle est l’erreur de temps (écart) lors de l’utilisation de SNTP ?

L'écart de l'horloge système par rapport à l'heure exacte est de 5 à 6 millisecondes :

sudo apt-get update
sudo apt install iputils-clockdiff
sudo clockdiff 3.ru.pool.ntp.org

Détails techniques

Au moment de la synchronisation de l'heure, le protocole UDP, port distant 123, protocole NTP version 4 est utilisé.
La charge utile est de 48 octets.

Frame xxxx : 90 octets sur le fil (720 bits), 90 octets capturés (720 bits) sur l'interface enp1s10, id 0
Ethernet II, Src : PERIPHER_0c(), Dst : Routeur()
Protocole Internet version 4, Src : xx.xx.xx.xx, Dst : 91.209.94.10
Protocole de datagramme utilisateur, port Src : xxxxx, port Dst : 123
Source Port: xxxxx
Destination Port: 123
Length: 56
Checksum: 0x7b13 [unverified]
[Checksum Status: Unverified]
[Stream index: 1059]
[Timestamps]
UDP payload (48 bytes)
Protocole de temps réseau (NTP version 4, client)
Flags: 0x23, Leap Indicator: no warning, Version number: NTP Version 4, Mode: client
Peer Clock Stratum: unspecified or invalid (0)
Intervalle d'interrogation par les pairs : invalide (0)
Peer Clock Precision: 1,000000 seconds
Root Delay: 0,000000 seconds
Root Dispersion: 0,000000 seconds
Reference ID: NULL
Reference Timestamp: (0)Jan 1, 1970 00:00:00.000000000 UTC
Origin Timestamp: (0)Jan 1, 1970 00:00:00.000000000 UTC
Receive Timestamp: (0)Jan 1, 1970 00:00:00.000000000 UTC
Transmit Timestamp: Oct 26, 2023 13:10:05.053581346 UTC

Expérimenter

Quel sera l’écart d’horloge si vous laissez votre PC sans Internet pendant la nuit ?

Si vous laissez le PC éteint pendant la nuit et que vous le démarrez sans réseau, l'erreur de temps était de plus 114 à 168 millisecondes.

Après avoir activé Internet, l'heure du système, grâce au protocole SNTP et au service SystemD, est revenue indépendamment à l'heure exacte - l'erreur de l'horloge système de l'ordinateur était de moins 14 millisecondes.

Lien utile :
*Configurer la synchronisation de l'heure sous Linux à l'aide de Systemd Timesyncd