"ntpq -p" 출력에 * 기호가 나타나는 데 시간이 오래 걸리는 이유는 무엇입니까?

"ntpq -p" 출력에 * 기호가 나타나는 데 시간이 오래 걸리는 이유는 무엇입니까?

진행하기 전에 호스트 컴퓨터에서 NTP 시간을 동기화해야 하는 C 응용 프로그램을 개발 중입니다. 기본적으로 명령을 실행하는 래퍼 C 함수를 작성했습니다.ntpq -p

출력에 * 문자가 포함되어 있으면 연결되어 있고 계속할 준비가 되어 있다고 가정합니다. 성공적인 NTP 동기화에 대한 출력 예:

remote                refid            st t when poll reach   delay   offset  jitter
==============================================================================
*myserver.domain.com  xxx.xxx.xxx.xxx  2 u  729 1024  377    1.120   -1.834   2.282

출력되는 경우확실히* 문자가 포함되어 있으면 내 프로그램이 잠시 잠자기 상태가 된 다음 다시 확인합니다. * 문자를 찾을 때까지 이 과정을 반복합니다.

그러나 내 컴퓨터 중 하나에서 * 문자가 재부팅 후 최종적으로 표시되는 데 오랜 시간이 걸리는 것을 발견했습니다(~5분). 하지만 더 빠르게 동기화된 것 같습니다. 즉, 를 실행하면 datetimeNTP 서버에서 가져와야 하는 정확한 시간처럼 보이지만 * 문자는 몇 분 후에야 표시됩니다.

이는 기본적으로 시스템이 다시 시작된 후 5분 동안 실행되지 않으므로 내 애플리케이션에 부정적인 영향을 미칩니다.

나는 ntp.conf 파일에서 "iburst" 옵션을 사용하고 있는데, 그것이 빨리 동기화되기를 바라고 있습니다.

# my NTP server config
server myserver.domain.com iburst

이번에도 동기화가 빠른 것 같지만 ntp -q출력에서 ​​* 문자를 보고하는 데 시간이 걸립니다.

이 문제를 해결하는 방법에 대한 아이디어가 있습니까? 또한 - NTP 동기화가 완료되었는지 확인하는 더 좋은 명령이 있습니까?

편집 #1: 더 많은 정보 추가

나는 Chris Davies의 답변을 통해 ntpd가 동기화된 것으로 간주되기 전에 8번의 성공적인 폴링이 필요하다는 것을 이해합니다. 이는 내 시계가 동기화되지 않았음에도 불구하고 올바르게 보이는 이유를 설명합니다. 이해가 되지 않는 것은 iburst 옵션을 설정한 경우에도 시작 시 폴링이 너무 느리게 진행되는 이유입니다.

나는 refid = .STEP을 발견했습니다. 초기 시작시. 이는 초기 동기화가 매우 크다는 것을 의미하기 때문에 이것이 관련이 있는지 확실하지 않습니다.

편집 #2: 전체 시퀀스는 다음과 같습니다.

  1. 호스트 시작 - 초기 NTP 동기화가 발생한 것으로 보이며 변경 사항이 매우 컸으므로 refid = .STEP입니다.

  2. 얼마 후 refid는 내 NTP 서버의 IP 주소를 업데이트했습니다. 그러나 8회 연속 성공이 발생하지 않았기 때문에 여전히 비동기 상태로 간주됩니다. 그리고 64초마다만 폴링하므로 동기화 시간이 더 길어집니다. 참고: IBURST를 활성화했습니다!

  3. NTP 데몬 서비스를 다시 시작하면 즉시 백업되어 동기화됩니다. 이제 iburst가 제대로 작동하는 것 같습니다.

  4. 재부팅 후 NTP 데몬이 시작되면 iburst 옵션이 실패한 것과 거의 같습니다. 하지만 서비스를 다시 시작하면 제대로 작동합니다.

답변1

시스템이 initramfs를 사용합니까? 그렇다면 수정 후 업데이트되었나요 ntp.conf? 그렇지 않은 경우 시스템은 ntpdinitramfs에 저장된 이전 버전을 사용하여 부팅 프로세스 초기에 부팅될 수 있습니다. 이는 부팅 시 이 옵션이 무시되는 것처럼 보이는 이유를 설명할 수 있습니다.ntp.confiburst

재시작 시 ntpd최신 버전이 사용되므로 ntp.confiburst옵션이 적용됩니다.

초기 동기화로 인해 항상 매우 큰 변경 사항이 발생하는 경우( refid = .STEP.말한 대로) 배포판 ntpdate에서 부팅하기 전에 부팅 시 실행할 수 있는지 확인하세요 ntpd. 아이디어는 ntpdate큰 단계가 처리된 다음 ntpd이미 정확한 시간에 매우 가까운 시스템 시계에서 시작하여 이상적으로 iburst단계를 변경하지 않고도 성공할 수 있다는 것입니다.

답변2

NTP 클라이언트는 서버 Reachable값이 가 될 때까지 자체적으로 동기화된 것으로 간주하지 않습니다 377. 이는 8비트 시프트 레지스터로, 매 사이클마다 원격 서버에 접근 가능한지 여부를 나타내는 Poll값이 0가장 낮은 비트로 시프트된다. 18진수 값은 원격 서버에서 연속적으로 8번의 성공적인 읽기를 377나타냅니다 .11111111

이런 일이 발생하면 *선택한 "truechimer"(합리적인 시간을 제공하는 서버) 옆에 하나가 표시될 뿐만 아니라 +완전히 액세스할 수 있지만 현재 선택되지 않은 다른 "truechimer"도 표시됩니다.

이상적으로는 홀수 개의 원격 NTP 서버와 둘 이상의 서버가 있어야 합니다. 3은 좋은 숫자입니다. 풀링된 서버를 사용하는 경우 다음과 같이 보일 수 있습니다.

0.pool.ntp.org
1.pool.ntp.org
2.pool.ntp.org

관련 정보