실제 NTP 동기화 없이 Linux에서 NTPSynchronized를 yes로 설정하는 방법은 무엇입니까?
나는 단지 몇몇 프로그램을 속이고 싶을 뿐이다.
]$ timedatectl show -p NTPSynchronized
NTPSynchronized=yes
답변1
D-Bus 속성을 언급하는 경우 org.freedesktop.timedate1
,관련 D-Bus 문서설명하다:
NTPSynchronized
커널이 시간을 동기화된 것으로 보고하는지 여부를 표시합니다(cfadjtimex(3)
).TimeUSec
그리고RTCTimeUSec
시스템과 RTC에 현재 시간을 표시합니다. 이 세 가지 속성의 목적은 원격 클라이언트가 D-Bus를 통해 이 정보에 액세스할 수 있도록 하는 것입니다. 지역 고객은 정보에 직접 접근할 수 있습니다.
이것은읽기 전용속성이므로 직접 설정할 수 없습니다. 그러나 -S
커널의 동기화 상태는 명령의 / 옵션을 사용하여 수정할 수 있으며(일반적으로 별도의 패키지로 설치해야 함) D-Bus 속성은 커널의 상태를 존중해야 합니다.--status
adjtimex
maxerror
몇 가지 테스트를 거친 후 시계를 "가짜 동기화" 상태로 설정할 때 및 일부 합리적인 값도 설정 해야 한다는 사실을 발견했습니다 esterror
. 이 값이 기본 "동기화되지 않음" 값(16000000)인 경우 두 시계 모두에 대해) 커널은 즉시 상태를 "동기화되지 않음"으로 되돌립니다. 예를 들면 다음과 같습니다.
adjtimex --status 0 --maxerror 50632 --esterror 438
시계가 동기화된 것처럼 보이게 하고 timedatectl
이를 확인합니다.
adjtimex --status 64 --maxerror 16000000 --esterror 16000000
동기화되지 않은 상태로 되돌아갑니다.
실제로 D-Bus 값은 NTPSynchronized
실제 상태 값보다 오류 변수가 최대값에 있는지 여부에 더 많이 의존하는 것 같습니다.
(런타임 maxerror
합계를 사용하고 테스트를 위해 비활성화했다가 다시 시작했습니다. 합당한 합계를 사용하면 동기화 상태를 가짜로 만들 수 있을 것입니다.)esterror
chronyd
chronyd
maxerror
esterror