원격 Linux 시스템에서 C ++ 컴파일- "시계 비뚤어 짐 감지"경고


168

PuTTY와 WinSCP를 통해 대학의 소규모 Linux 클러스터에 연결되어 후자를 사용하여 파일을 전송하고 전자와 함께 컴파일하고 실행합니다. 지금까지 저의 작업은 대학 실험실에서 수행되었지만 오늘날 저는 집에서 흥미로운 경고를 발생시키는 작업을하고 있습니다.

나는 물건의 전체 폴더를 업로드하고 make명령 을 실행할 때 이것을 마지막 출력 줄로 얻습니다.

확인 : 경고 : 클럭 왜곡이 감지되었습니다. 빌드가 불완전 할 수 있습니다.

결과 바이너리는 올바르게 작동하며 빌드 프로세스에 다른 예기치 않은 오류가없는 것 같습니다.

새로운 / 교체 파일을 업로드 한 후 빌드하여 오류를 유발할 수있는 것 같습니다 (모든 것을 로컬로 편집 한 다음 새 버전을 업로드하십시오). 파일 수정 시간이 일치하지 않는 것처럼 단순한 지 궁금합니다. 아니면 더 관련이 있습니까?

그래서 걱정해야합니까? 이 문제를 어떻게 해결 / 예방합니까?


일부 답변에서 언급했듯이 클럭 차이가 가능합니다. 복사 전후에 소스 파일의 수정 시간을 비교할 수도 있습니다. 일광 절약 시간을 다르게 처리하는 두 개의 OS / 파일 시스템으로 인해 시간이 다를 수 있습니다.
Steve Jessop

마지막 제안 : Windows 시스템이 없으므로 PuTTY 및 WinSCP의 기능에 익숙하지 않지만 파일 전송 도구에는 수정 된 시간의 보존 여부를 제어 할 수있는 옵션이 있습니다. 모드 시간은 분명히 유지되지만 파일을 끌 수 있으면 파일을 시스템에 복사 할 때 원격 시스템 시계가 아닌 시스템 시계에서 설정 한 모드 시간을 사용합니다.
MadScientist

답변:


206

이 메시지는 일반적으로 일부 파일의 파일이 현재 시스템 시간보다 늦게 수정되었음을 나타냅니다. make소스 파일이 오브젝트 파일보다 최근에 수정되었는지 확인하여 증분 빌드를 수행 할 때 컴파일 할 파일을 결정 하므로 ,이 상황으로 인해 불필요한 파일이 작성되거나 필요한 파일이 작성 되지 않을 수 있습니다.

그러나 처음부터 빌드하는 경우 (증분 빌드를 수행하지 않음) 결과없이이 경고를 무시할 수 있습니다.


4
이 클러스터가 시간 ~ 3mins 것 같다 뒤에 파일은 "미래"에서 수정 된, 그래서 내 바탕 화면을 가능성이 원인을 보인다. 빌드를 실행하기 전에 무엇이든 업로드 한 후 5 분 정도 기다리는 것이 가장 안전한 방법입니까? 차라리 기다릴 필요가 없으므로 업로드 된 "미래"파일의 시간을 재설정하여 문제를 피할 수있는 방법이 있습니까?
DMA57361

14
@ DMA57361 : touch *mtimes를 현재 시간으로 업데이트합니다. 또는 데스크탑에서 NTP를 활성화하여 시계를 동기화 할 수 있습니다 (유니 머신이 아닌 데스크탑이 잘못되었다고 가정합니다. 후자는 시스템 관리자에게 수정하도록 요청할 수 있습니까?)
caf

2
touch *그것에 대해 감사합니다, 그것은 지금이며, 내가 잘못된 것을 발견하고 다음에 사이트에있을 때 관리자에게 한마디 할 수 있는지 알 수 있습니다.
DMA57361

1
필자의 경우에는 재귀 적 인 터치가 필요했습니다.find . -exec touch {} \;
ams

8
@AaronS는 touch여러 파일을 받아 들일 수있는 명령 find . -exec touch {} +을 위해 touch최대한 많은 인수를 사용 하여 훨씬 효율적으로 수행 할 수 있습니다.
Viktor Dahl

56

일반적으로 이것은 NFS 마운트 디렉토리에 빌드 할 때 발생하며 클라이언트와 NFS 서버의 시계가 동기화되지 않습니다.

해결책은 NFS 서버와 모든 클라이언트에서 NTP 클라이언트를 실행하는 것입니다.


1
NFS 마운트 디렉토리를 구축하고 있지 않습니다.
kingsmasher1

실제로 실행이나 결과에 아무런 영향을 미치지 않으므로 그러한 경고를 억제하는 몇 가지 팁을 줄 수 있는지 알려주세요.
kingsmasher1

@ kingsmasher1 : 관련된 모든 머신에서 NTP 클라이언트를 실행하십시오.
janneb

방금 타겟을 확인했습니다. 날짜가 설정되지 않았습니다. 여기서 NTP를 실행하는 방법을 잘 모르겠습니다. 날짜를 업데이트해도 괜찮습니까? 내가 빌드 한 x86은 현재 날짜로 설정되어 있지만 대상 (실행 위치)의 날짜는 1970 년입니다.
kingsmasher1

1
문제가 정렬되었습니다. 목표 날짜를 현재 날짜로 변경하고 경고가 사라졌습니다. 따라서 문제는 다음과 같습니다. 대상 날짜가 실행 날짜보다 이전 날짜 인 경우 문제가 발생합니다.
kingsmasher1

22

네트워크 시간 프로토콜 설치

이것은 make서버의 Samba SMB CIFS 공유에서 실행될 때도 발생했습니다 . 내구성있는 솔루션은 ntp서버와 클라이언트 모두에 데몬을 설치하는 것 입니다. (이 문제는를 실행해도 해결되지 않습니다 ntpdate. 이렇게하면 시차는 일시적으로 만 해결되지만 앞으로는 해결되지 않습니다.)

Ubuntu 및 Debian 파생 시스템의 경우 명령 줄에 다음 줄을 입력하면됩니다.

$ sudo apt install ntp

또한 touch *영향을받는 디렉토리에서 명령을 한 번만 (한 번만) 실행하여 파일 수정 시간을 한 번에 모두 수정해야합니다.

$ touch *

의 차이점에 대한 자세한 내용 ntpntpdate에 참조하시기 바랍니다 :



6

LinuxQuestions.org의 사용자 m9dhatter에 따르면 :

"make"는 파일의 타임 스탬프를 사용하여 컴파일하려는 파일이 오래되었거나 새 파일인지 확인합니다. 시계가 k 경우 컴파일에 문제가있을 수 있습니다.

몇 분 전에 시계 시간으로 다른 컴퓨터에서 파일을 수정하고이를 컴퓨터로 전송 한 후 컴파일하려고하면 파일이 나중에 수정되었다는 경고가 표시 될 수 있습니다. 시계가 비뚤어 지거나 그 영향에 영향을 줄 수 있습니다 (실제로 기억할 수 없음). 문제가되는 파일을 ls하고 다음을 수행 할 수 있습니다.

#touch <불쾌한 파일의 파일 이름>


6

여기에있는 다른 답변은 문제를 설명하는 데 도움이되므로 여기서는 반복하지 않습니다. 그러나 아직 나열되지 않은 문제를 해결할 수있는 솔루션이 있습니다 : 단순히 run make clean, rerun make.

이미 컴파일 된 파일을 제거하면 make에서 타임 스탬프를 비교할 파일이 없어 경고가 해결됩니다.


이것은 실제 솔루션이 아닙니다. 컴파일러가 모든 것을 컴파일하는 데 30 분이 필요하고 단일 파일 (빌드 2 초 만 필요)에서 작업하는 경우 하루 종일 낭비하여 단일 부분을 수정하려고합니다. 거대한 도서관. 권리? 그러나 그렇습니다 make clean. 다른 사람을 만들어 문제를 해결하십시오.
Leos313

@ Leos313 나는 단지 나를 위해 일한 것을 공유하고 있습니다. 학교 네트워크에서 루트 권한이 없으므로 NTP를 설정할 수 없었으며 touch모든 파일에서 사용하는 컴파일 결과를 신뢰하지 않았습니다 . 전체 재 컴파일이 필요할 수도 있지만, 그럴만한 가치가 있는지 여부는 우선 순위와 프로젝트 규모에 따라 다릅니다. 나는 그것이 최선이 아니거나 몇 가지 단점이 있기 때문에 그것이 "실제 해결책이 아님"이라고 말하는 것이 정확하다고 생각하지 않습니다. 문제를 해결합니다. 나에게 해결책처럼 들린다.
skrrgwasme '12

나는 투표하지 않았다 :) 그것은 다른 사람들을 만들어 문제를 해결한다. 이것 외에는 아무것도 없습니다! :) 확실히 대답은 대부분의 상황에서 도움이 될 것이며 여기에있을 가치가 있습니다! 내가, 밑줄을 원하고 때로는, 그것을 실행하는 것보다 더 나은 숙박에 대한 경고입니다make clean
Leos313

4

나는 기계에서 시계가 나오기 때문에 과거에 이것을 가지고 있었다. 모든 시스템이 동일한 시간을 갖도록 NTP 설정을 고려하십시오.


2

이는 일반적으로 호스트와 클라이언트 시스템 간의 시간이 일치하지 않기 때문입니다. ntp를 사용하여 컴퓨터의 시간을 동기화 할 수 있습니다 .


1

해결책은 NTP 클라이언트를 실행하는 것입니다. 아래와 같이 명령을 실행하십시오.

#ntpdate 172.16.12.100

172.16.12.100은 ntp 서버입니다


2
스택 오버플로에 오신 것을 환영합니다! 게시물 주셔서 감사합니다! 게시물에 서명 / 태그 라인을 사용하지 마십시오. 사용자 상자는 서명으로 계산되며 프로필을 사용하여 자신에 대한 정보를 게시 할 수 있습니다. 서명 / 태그 라인에 대한 FAQ
Andrew Barber

사용 ntpdate은 단 한 번의 교정입니다. ntp내구성있는 솔루션을 얻으려면 서버와 클라이언트 모두 에 설치 하는 것이 좋습니다 .
Sroo Stroobandt

1

컴퓨터에서 시계 배터리를 교체하십시오. 마더 보드의 동전 모양 배터리를 교체해야 할 때이 오류 메시지가 나타났습니다.


1

sudo 권한이있는 경우 시스템 시간을 동기화하는 것이 하나의 옵션입니다.

sudo date -s "$(wget -qSO- --max-redirect=0 google.com 2>&1 | grep Date: | cut -d' ' -f5-8)Z"

-1

컴파일 결과 (예 : somefile.o)가 소스 (예 : somefile.c)보다 오래된 지 확인합니다. 위의 경고는 파일의 시간 기록에 관한 것이 이상하다는 것을 의미합니다. 아마도 University 서버의 시스템 시계가 시계와 다르면 오후 1시에 수정 날짜가 오후 2 시인 파일을 누르십시오. 날짜를 입력하여 콘솔에서 시간을 볼 수 있습니다.


-3

이것은 나에게 일어났다. 내가 달려서 make -j 4일부 작업이 고장 났기 때문 입니다. -j옵션을 사용할 때이 경고가 예상됩니다 .


5
작업이 정상적으로 완료되지 않았습니다. 수정 시간이 미래에 있어야한다는 의미는 아닙니다.
klimkin

@klimkin 왜 안돼? 다른 프로세서가 시작되기 전에 일부 프로세서가 구성 요소 작성을 완료했다고 생각합니다.
kilojoules
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.