194 votes

Compilation de C++ sur une machine Linux distante - avertissement "clock skew detected" (décalage d'horloge détecté)

Je suis connecté au petit cluster Linux de mon université via PuTTY et WinSCP, transférant des fichiers à l'aide de ce dernier et les compilant et les exécutant avec le premier. Jusqu'à présent, j'ai travaillé dans les laboratoires de l'université, mais aujourd'hui, j'ai effectué quelques travaux à la maison qui ont généré un avertissement intéressant.

J'ai téléchargé un dossier entier d'objets et, après avoir exécuté la commande make j'obtiens ceci comme dernière ligne de sortie :

make : avertissement : Détection d'un décalage d'horloge. Votre construction peut être incomplète.

Le binaire résultant fonctionne correctement, et il ne semble pas y avoir d'autres erreurs inattendues dans le processus de construction.

Il semble que je puisse déclencher l'erreur en construisant après avoir téléchargé de nouveaux fichiers / fichiers de remplacement (je modifie tout localement puis je télécharge la nouvelle version), donc je me demande si c'est quelque chose d'aussi simple que des temps de modification de fichiers incompatibles ? Ou quelque chose de plus inquiétant ?

Alors, dois-je m'inquiéter ? Comment puis-je réparer/prévenir cela ?

0 votes

Les différences d'horloge sont une possibilité, comme mentionné dans certaines des réponses. Vous pourriez également comparer les heures de modification des fichiers sources avant et après la copie - vous pourriez constater qu'elles sont différentes d'une heure en raison du traitement différent de l'heure d'été par les deux systèmes d'exploitation/systèmes de fichiers.

0 votes

Une dernière suggestion : Je n'ai pas de machines Windows et je ne suis donc pas familier avec les capacités de PuTTY et WinSCP, mais souvent les outils de transfert de fichiers ont des options qui vous permettent de contrôler si l'heure de modification est préservée ou non. Vos heures de modification sont évidemment préservées, mais si vous pouvez désactiver cette option, lorsque les fichiers sont copiés sur votre système, ils utiliseront les heures de modification définies par votre horloge système, et non par celle du système distant.

257voto

Tyler McHenry Points 35551

Ce message indique généralement que certains de vos fichiers ont des dates de modification postérieures à l'heure actuelle du système. Depuis make décide des fichiers à compiler lors d'une construction incrémentale en vérifiant si un fichier source a été modifié plus récemment que son fichier objet, cette situation peut entraîner la construction de fichiers inutiles ou, pire, de fichiers nécessaires. no être construit.

Cependant, si vous construisez à partir de zéro (sans faire une construction incrémentale), vous pouvez probablement ignorer cet avertissement sans conséquence.

4 votes

Il semble que le cluster a un temps ~3mins derrière mon bureau, donc des fichiers ayant été modifiés dans le "futur" semble une cause probable. Est-ce que le plus sûr est d'attendre environ 5 minutes après avoir téléchargé quoi que ce soit avant de lancer une compilation ? Je préférerais ne pas avoir à attendre, alors y a-t-il un moyen de réinitialiser les temps sur tous les fichiers "futurs" téléchargés pour éviter ce problème ?

24 votes

@DMA57361 : touch * mettra à jour les mtimes à l'heure actuelle. Vous pouvez également activer NTP sur votre bureau pour synchroniser votre horloge (en supposant que c'est votre bureau qui se trompe, et non la machine de l'université... si c'est le cas, vous pouvez demander aux administrateurs système de régler le problème).

2 votes

Merci pour cela, touch * C'est le cas pour l'instant, et je vais voir si je peux trouver ce qui ne va pas et peut-être avoir un mot avec le gars de l'administration la prochaine fois que je suis sur le site.

66voto

janneb Points 17303

Cela se produit généralement lors de la construction dans un répertoire monté par NFS, et les horloges du client et du serveur NFS ne sont pas synchronisées.

La solution consiste à exécuter un client NTP à la fois sur le serveur NFS et sur tous les clients.

1 votes

Je ne construis pas sur un répertoire monté par NFS.

0 votes

Faites-moi savoir si vous pouvez donner quelques conseils pour supprimer cet avertissement, car il ne fait vraiment aucune différence dans l'exécution ou les résultats.

0 votes

@kingsmasher1 : Exécutez un client NTP sur toutes les machines concernées.

37voto

Serge Stroobandt Points 525

Installer le Network Time Protocol

Cela m'est également arrivé en exécutant make sur un partage Samba SMB CIFS sur un serveur. Une solution durable consiste à installer le ntp sur le serveur et le client. (Veuillez noter que ce problème n'est pas résolu par l'exécution de la commande ntpdate . Cela ne résoudrait le décalage horaire que temporairement, mais pas dans le futur).

Pour les systèmes Ubuntu et dérivés de Debian, il suffit de taper la ligne suivante dans la ligne de commande :

$ sudo apt install ntp

De plus, il faudra encore lancer la commande touch * une fois (et une seule) dans le répertoire concerné pour corriger les temps de modification des fichiers une fois pour toutes.

$ touch *

Pour plus d'informations sur les différences entre ntp y ntpdate veuillez vous référer à :

4 votes

Merci, cela m'a aidé à utiliser WSL2 sous Windows.

15voto

Brijesh Valera Points 467

Une solution simple :

# touch filename

fera tout bien.

Pour plus d'informations : http://embeddedbuzz.blogspot.in/2012/03/make-warning-clock-skew-detected-your.html

6voto

z - Points 5610

Selon utilisateur m9dhatter sur LinuxQuestions.org :

"make" utilise l'horodatage du fichier pour déterminer si le fichier qu'il essaie de compiler est ancien ou récent. Si votre horloge est déréglée, il peut avoir des problèmes de compilation.

si vous essayez de modifier des fichiers sur une autre machine avec une horloge avancée de quelques minutes et que vous les transférez sur votre machine, puis essayez de compiler, il se peut que vous receviez un avertissement disant que le fichier a été modifié depuis le futur. l'horloge peut être décalée ou quelque chose de ce genre (je ne m'en souviens pas vraiment). vous pouvez simplement ls vers le fichier en question et faire cela :

touch <nom du fichier incriminé>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X