Ich bin über PuTTY und WinSCP mit dem kleinen Linux-Cluster meiner Universität verbunden, übertrage Dateien mit letzterem und kompiliere und führe sie mit ersteren aus. Meine bisherige Arbeit wurde in den Labors der Universität durchgeführt, aber heute habe ich zu Hause gearbeitet, was eine interessante Warnung hervorgerufen hat.
Ich habe einen ganzen Ordner mit Dingen hochgeladen und beim Ausführen des make
Befehls erhalte ich diesen als letzte Ausgabezeile:
make: Warnung: Zeitversatz erkannt. Ihr Build ist möglicherweise unvollständig.
Die resultierende Binärdatei funktioniert ordnungsgemäß und es scheint keine weiteren unerwarteten Fehler im Erstellungsprozess zu geben.
Ich scheine in der Lage zu sein, den Fehler durch Erstellen nach dem Hochladen einiger neuer / Ersatzdateien auszulösen (ich bearbeite alles lokal und lade dann die neue Version hoch). Ich frage mich also, ob dies genauso einfach ist wie nicht übereinstimmende Dateimodifikationszeiten. Oder etwas Besorgniserregenderes?
Also, sollte ich mir Sorgen machen? Wie kann ich das beheben / verhindern?
Antworten:
Diese Meldung ist normalerweise ein Hinweis darauf, dass einige Ihrer Dateien später als die aktuelle Systemzeit geändert wurden. Da
make
entschieden wird, welche Dateien beim Ausführen eines inkrementellen Builds kompiliert werden sollen, indem überprüft wird, ob eine Quelldatei in jüngerer Zeit als ihre Objektdatei geändert wurde, kann diese Situation dazu führen, dass unnötige Dateien erstellt werden oder, schlimmer noch, notwendige Dateien nicht erstellt werden.Wenn Sie jedoch von Grund auf neu erstellen (ohne inkrementelle Erstellung), können Sie diese Warnung wahrscheinlich ohne Konsequenz ignorieren.
quelle
touch *
Aktualisiert die Zeiten auf die aktuelle Zeit. Alternativ können Sie NTP auf Ihrem Desktop aktivieren, um Ihre Uhr zu synchronisieren (vorausgesetzt, es ist Ihr Desktop, der falsch ist, und nicht der Uni-Computer ... wenn letzterer, bitten Sie vielleicht die Systemadministratoren, das Problem zu beheben?)touch *
es ist fürs Erste, und ich werde sehen, ob ich herausfinden kann, was falsch ist, und vielleicht das nächste Mal, wenn ich vor Ort bin, mit dem Administrator sprechen.find . -exec touch {} \;
touch
können mehrere Dateien akzeptieren, auf die reagiert werden kann. Sie können dies (viel) effizienter ausführenfind . -exec touch {} +
,touch
wobei so viele Argumente wie möglich aufgerufen werden.In der Regel tritt dies auf, wenn ein in NFS bereitgestelltes Verzeichnis erstellt wird und die Uhren auf dem Client und dem NFS-Server nicht synchron sind.
Die Lösung besteht darin, einen NTP-Client sowohl auf dem NFS-Server als auch auf allen Clients auszuführen.
quelle
Installieren Sie das Network Time Protocol
Dies ist mir auch passiert, als ich
make
auf einer Samba SMB CIFS-Freigabe auf einem Server ausgeführt wurde. Eine dauerhafte Lösung besteht darin, denntp
Dämon sowohl auf dem Server als auch auf dem Client zu installieren . (Bitte beachten Sie, dass dieses Problem nicht durch Ausführen behoben wirdntpdate
. Dadurch wird der Zeitunterschied nur vorübergehend, jedoch nicht in Zukunft behoben .)Geben Sie für von Ubuntu und Debian abgeleitete Systeme einfach die folgende Zeile in die Befehlszeile ein:
Darüber hinaus muss der Befehl
touch *
im betroffenen Verzeichnis noch einmal (und nur einmal) ausgegeben werden, um die Änderungszeiten der Dateien ein für alle Mal zu korrigieren.Weitere Informationen zu den Unterschieden zwischen
ntp
undntpdate
finden Sie unter:quelle
Einfache Lösung:
wird alles in Ordnung machen.
Für weitere Informationen: http://embeddedbuzz.blogspot.in/2012/03/make-warning-clock-skew-detected-your.html
quelle
Laut Benutzer m9dhatter auf LinuxQuestions.org :
quelle
Die anderen Antworten hier erklären das Problem gut, daher werde ich das hier nicht wiederholen. Es gibt jedoch eine Lösung, die das Problem beheben kann, die noch nicht aufgeführt ist: Einfach ausführen
make clean
und dann erneut ausführenmake
.Wenn make bereits kompilierte Dateien entfernt, wird verhindert, dass make Dateien zum Vergleichen der Zeitstempel von make hat, wodurch die Warnung behoben wird.
quelle
make clean
Ihnen werden Sie die Probleme lösen (indem Sie andere erstellen).touch
alle Dateien verwendet habe. Sie haben Recht, dass eine vollständige Neukompilierung erforderlich ist, aber ob sich die Zeit lohnt oder nicht, hängt von Ihren Prioritäten und Ihrer Projektgröße ab. Ich denke nicht, dass es richtig ist zu sagen, dass es "keine echte Lösung" ist, nur weil es nicht das Beste ist oder einige Nachteile hat. Es wird das Problem beheben; klingt für mich nach einer Lösung.make clean
Ich hatte dies in der Vergangenheit - aufgrund der Uhren an den Maschinen. Richten Sie NTP so ein, dass alle Computer dieselbe Zeit haben.
quelle
Dies ist normalerweise einfach auf nicht übereinstimmende Zeiten zwischen Ihrem Host- und Client-Computer zurückzuführen. Sie können versuchen, die Zeiten auf Ihren Computern mit ntp zu synchronisieren .
quelle
Die Lösung besteht darin, einen NTP-Client auszuführen. Führen Sie einfach den folgenden Befehl aus
172.16.12.100 ist der NTP-Server
quelle
ntpdate
ist nur eine einmalige Korrektur. Es ist besser,ntp
sowohl auf dem Server als auch auf dem Client zu installieren , um eine dauerhafte Lösung zu erhalten.Ersetzen Sie die Batterie der Uhr in Ihrem Computer. Ich habe diese Fehlermeldung gesehen, als die Münzbatterie auf dem Motherboard ausgetauscht werden musste.
quelle
(Nur für den Fall, dass jemand hier landet) Wenn Sie Sudo-Rechte haben, können Sie die Systemzeit synchronisieren
quelle
Überprüfen Sie, ob das Ergebnis der Kompilierung, z. B. somefile.o, älter als die Quelle ist, z. B. somefile.c. Die obige Warnung bedeutet, dass etwas über die Zeitstapel der Dateien seltsam ist. Wahrscheinlich unterscheiden sich die Systemuhren des Universitätsservers von Ihrer Uhr und Sie pushen beispielsweise um 13 Uhr eine Datei mit dem Änderungsdatum 14 Uhr. Sie können die Uhrzeit an der Konsole anzeigen, indem Sie das Datum eingeben.
quelle
Das ist mir passiert. Das liegt daran, dass ich gelaufen bin
make -j 4
und einige Jobs nicht mehr in Ordnung waren. Diese Warnung sollte bei Verwendung der-j
Option erwartet werden .quelle