시스템 시작 중 NTP 시스템 시간이 올바른지 확인하는 방법

시스템 시작 중 NTP 시스템 시간이 올바른지 확인하는 방법

실시간 온도를 기록하는 데 사용하는 Raspbian(Debian 파생 제품)을 실행하는 Raspberry Pi가 있습니다. 그 일환으로 몇 초까지 정확한 시계가 필요합니다. 서버가 부팅될 때 정상적인 작동 중에 Raspberry Pi가 네트워크를 통해 주기적으로 NTP 서버에 연결하여 로컬 시계가 올바른 시간에 합리적으로 가깝다는 것을 알고 있습니다. 이 정확도는 내 애플리케이션에 충분합니다. Raspberry Pi에는 서버가 종료되거나 전원이 꺼질 때 시간을 유지하는 배터리 구동 시계가 없으므로 인터넷 연결이 설정되고 NTP를 통해 정확한 시간을 얻을 때까지 처음 부팅할 때 시스템 시간이 올바르지 않습니다.

제가 발견한 한 가지 문제는 정전이 발생하면 Raspberry Pi가 전원 없이 잠시 동안 종료되었다가 나중에(예: 30분) 다시 켜진다는 것입니다. Pi가 부팅되고 내 응용 프로그램이 시작되고 온도를 다시 기록하기 시작하지만 Pi의 시계가 올바르지 않아 기록된 온도의 타임스탬프가 잘못되었습니다. 어떻게든 마지막으로 알려진 시간을 저장하고 거기서부터 시작하는 것 같습니다(재부팅 시 에포크 시간으로 재설정되지 않음). 결국 Pi가 연결된 LAN이 다시 작동하고 인터넷 연결이 다시 이루어지면 Pi는 (NTP를 통해) 시간을 수정하지만 그때까지 내가 기록한 타임스탬프는 부정확합니다.

이 문제를 해결하기 위한 최선의 조치가 무엇인지 알고 싶습니다.

나는 유지 관리상의 이유로 배터리로 작동되는 추가 시계를 추가하지 않을 것입니다. 이는 기본적으로 내장형 장치이고 사용자가 쉽게 접근할 수 없기 때문에 배터리를 교체해야 하는 것을 원하지 않습니다.

네트워크에서 시간이 정확하게 검색되었음을 알 때까지 애플리케이션에서 온도 기록을 연기하도록 할 의향이 있지만 해당 상태를 감지하는 방법조차 모릅니다. NTP 서버에서 시간이 업데이트되어 현재 올바른지 아는 방법을 아는 사람이 있습니까?

내 응용 프로그램은 시작 시 스크립트를 실행하여 시작됩니다.

이 문제를 해결하는 방법에 대한 다른 아이디어가 있습니까?

답변1

라즈베리 파이를 재부팅할 때마다(몇 초 정도 소요) 시간을 늘리거나 줄여 시계가 두 번 이상 꺼집니다 ntp(예: 회전, 이는 예를 들어 실시간 시계로 인해 약간만 벗어난 사항만 수정하는 데에만 작동합니다) 매일 꺼져 있는 경우(초 정도 느리거나 빠르기 때문에) ntp시계를 설정해야 합니다.

ntpdate따라서 가장 간단한 방법은 검색된 값의 거리를 기반으로 날짜 또는 롤백을 설정하는 스크립트 또는 이와 동등한 기능을 사용하여 온도 측정 프로그램의 첫 번째 호출을 시작하는 것입니다 . ntpdate따라서 시계가 이미 수정에 가까운 값으로 설정되어 있는 경우, ntp예를 들어 재부팅하지 않고 이 스크립트를 통해 재부팅하면 문제가 발생하지 않습니다.

답변2

ntp-waitNTP와 함께 제공되는 프로그램을 확인하세요 . 실행하면 시계가 동기화될 때까지 기다린 다음 종료됩니다. (또는 결국 포기하고 오류와 함께 종료됩니다.) 이를 사용하여 시계가 동기화될 때까지 스크립트가 시작되지 않도록 할 수 있습니다.

ntpq -p또는 같은 명령을 실행 ntpq -c rv하고 출력을 구문 분석하여 시계 상태를 확인할 수도 있습니다. 사실, ntp-wait짧은 Perl 스크립트가 바로 그 일을 합니다.

답변3

또 다른 옵션은 출력을 구문 분석하여 ntpq -c peers레이어가 16에서 멀리 떨어져 있는지 확인하는 것입니다.

답변4

NTP 클라이언트는 NTP 서버이기도 하며 현재 상태를 클라이언트에 보고할 수 있습니다.

나는 실제로 내 상자에서 chrony대신 사용하고 ntpd있으며 현재 상태를 물으면 다음과 같이 말합니다.

[axa@enyo ~]$ chronyc tracking
Reference ID    : p.q.s.t (xxx.yyy.zzz)
Stratum         : 4
Ref time (UTC)  : Sun May 31 22:35:34 2015
System time     : 0.000630264 seconds slow of NTP time
Last offset     : +0.000047504 seconds
RMS offset      : 0.023269517 seconds
Frequency       : 6.462 ppm slow
Residual freq   : -0.023 ppm
Skew            : 0.225 ppm
Root delay      : 0.031594 seconds
Root dispersion : 0.025155 seconds
Update interval : 1035.3 seconds
Leap status     : Normal

"시스템 시간" 필드에서 프로세스는 시계가 충분히 정확한지 여부를 확인할 수 있습니다. 사람이 소비할 수 있도록 명령의 출력을 구문 분석하지 않고도 값을 직접 읽을 수 있다고 확신하지만 자세한 내용은 모릅니다.

관련 정보