
ntpd
실제로는 허용하지 않고 공통 데몬을 사용하여 가상 머신이 시간을 유지하는지 여부를 테스트 하고 싶습니다 .조정하다시계.
macOS 시스템의 VirtualBox 내에서 Solaris 11.4(Intel용 Oracle 표준 이미지)를 실행하고 있는데 제대로 동기화할 시간이 없습니다. VM이 이미 이 작업을 수행하기 위해 VirtualBox Guest Additions를 사용하고 있을 수도 있고(이것이 어떻게 작동하는지 모르겠습니다) ntpd
게스트에서 실행하여 시간 유지를 방해할 수도 있다는 사실이 저에게 충격을 주었습니다.
ntpd
이를 테스트하기 위해 Solaris VM에 다음 을 설정해야 한다고 생각했습니다 .감시 장치몇 개의 공개 시간 서버를 사용하지만 어떻게든 로컬 시계를 수정하지 못하게 합니다. 그렇게 하면 시간이 지남에 따라 로그 loopstats
와 peerstats
로그가 어떻게 보이는지 살펴보고 현지 시계가 실제로 좋은 시간을 유지하는지 확인할 수 있었습니다.
문제는 ntpd
로컬 시계 조정을 중지하는 방법에 대한 힌트를 찾을 수 없다는 것입니다.
나는 과거에도 openntpd
실제 시간 기록을 위해 OpenBSD에서 사용하는 시스템에서 이 작업을 수행하고 싶었습니다. 그런 다음 데몬 ntpd
은 방해 없이 배경에 앉아서 모니터링할 수 있습니다. 하지만 그때도 이를 달성할 방법을 찾을 수 없었습니다.
답변1
ntpd
당신이 그것을 이해~ 해야 하다ntpd를 사용하면 AFAIK의 유일한 옵션은 다음과 같습니다.
NTP 비활성화
에서 볼 수 있듯이매뉴얼 ntp.conf
페이지ntp를 비활성화할 가능성이 있습니다.피드백 루프또는 일반 용어로 말하면 시간 서버와 로컬 시계 간의 시간 수정 계산 기능을 제거합니다. ntp.conf
해당 옵션을 활성화하는 데 필요한 줄은 다음과 같습니다 .
disable ntp
참고: 이 옵션을 사용하면 ntpd가 시간 참조를 요청하는 다른 시스템에 제공할 수 있는 시간이 잘못되거나 꺼질 수 있습니다. deny
외부 시스템의 시간 드리프트를 모니터링하려는 경우가 아니면(외부 시스템의 IP 거부 및 허용 사용) 줄을 사용하여 다른 시스템의 시간에 대한 모든 쿼리를 거부하는 것이 합리적으로 보입니다 .
메모:시스템 시계가 실제로 ntpd에 의해 "자유롭게 실행"되도록 남겨져 있다는 것이 나에게는 완전히 명확하지 않습니다. 그러나 이는 문서화된 옵션이므로 ntpd가 문서화된 내용을 준수하지 못하는 경우 이는 버그입니다.
미친
minsane minsane
이는 클러스터링 알고리즘에 대한 하나 이상의 실제 키머를 생성하기 위해 시계 선택 알고리즘에 사용할 수 있는 최소 후보 수입니다. 이 숫자보다 적은 수의 사용 가능한 경우시계는 규율이 없으며 자유롭게 작동하도록 허용됩니다..
이는 다음과 같이 라인( in ntp.conf
)을 설정하여 수행됩니다.
tos minsane 100
또는 다른 높은 숫자(사용 가능하거나 사용되는 서버보다 큼).
참고: 시계의 값이 천천히 이동하는 것을 방지하기 위해 커널 드리프트 값이 0으로 재설정되는지 확실하지 않습니다. 커널 규율 기능을 비활성화하도록 추가로 설정하는 것이 합리적일 수 있습니다 disable kernel
.
관련된
ntpd -qn
ntpd
서버가 실행 중일 때 ntpq -pn
ntpd 서버가 시스템 시계를 동기화 상태로 유지하는 작업을 얼마나 잘 수행하고 있는지 보고할 수 있습니다. 이는 시차를 기록하는 또 다른 방법입니다.
ntpdate -q
(더 이상 사용되지 않는 것으로 태그가 지정된) 패키지를 ntpdate
사용하여 다음과의 시차를 확인할 수 있습니다.
ntpdate -q 'pool.ntp.org' # marked as deprecated.
ntpdate -qu 'pool.ntp.org'
명령을 실행하는 데 루트 권한이 필요하지 않도록 사용하십시오 ( -u
"권한이 없는 네트워크 포트 사용"을 의미하지만 여전히 실행 파일은 사용자가 액세스할 수 있어야 합니다).
sntp
쿼리할 간단한 프로그램이 있습니다(-s 또는 -S 옵션이 사용되지 않으면 변경되지 않음).
sntp pool.ntp.org
날짜
이 프로그램은 rdate
원격 시간(및 현지 시간)을 표시할 수 있습니다.
rdate -np pool.ntp.org; date
의미 -n
: (기본) RFC 868 시간 프로토콜 대신 SNTP(RFC 2030)를 사용합니다. 그리고, 오직인쇄실제로 변경하지 않고 결과를 얻습니다.
그러나 이 프로그램은 전체 초(분수 아님)의 분해능으로 제한됩니다. 그리고, 그것은솔라리스에는 옵션이 없습니다
크로니
ntp(chrony)의 대체 패키지는 시스템 시계를 설정하지 않고 시차 테스트를 실행할 수 있습니다.
chronyd -Q 'pool pool.ntp.org iburst'
나는 이것이 인터넷 ntp 시간과 시스템 시간 사이의 시간차를 (변경하지 않고) 감지하는 모든 방법이라고 믿습니다.
답변2
ntpd
나는 이것이 기본적 으로 가능한지 의심 스럽습니다 .
- 그 중심에는
ntpd
"세 번째" 시계가 없습니다.(처음 두 개가 있는 곳은시스템 시계 및 단조 시계). - 기능적으로
ntpd
는 현재 시간뿐만 아니라시스템 클럭의 실행 속도를 제어하는 매개변수도 조정합니다.. 암시적으로 이는 이러한 조정의 효과를 모니터링하기 위해 작성되었습니다.
이 두 가지를 종합하면 ntpd에 실시간 조정 없이 이러한 매개변수의 값을 적절하게 유지할 수 있는 모드가 있을 가능성은 거의 없습니다.ㅏ여기서 사용할 수 있는 유일한 시계는 시스템 시계입니다.
귀하의 질문에 실제로 필요한 것이 명확하지 않습니다 ntpd
. 모든 [S]NTP 클라이언트가 가능합니다.
약간의 코드에 익숙하다면 시스템 시계를 재조정하지 않고도 서버를 폴링하는 무언가를 함께 넣을 수 있습니다.
예를 들어, 다음과 같은 Python용 NTP 라이브러리가 있습니다.ntplib. 60초 폴링에서 오프셋을 인쇄하는 스크립트는 다음과 같습니다.
import ntplib
import sys
import time
def main(*args):
ntp_client = ntplib.NTPClient()
while True:
for server in args:
try:
response = ntp_client.request(server, version=3)
print(response.offset)
time.sleep(60)
except ntplib.NTPException:
print("query failed: {}".format(server))
if __name__ == "__main__":
if len(sys.argv) == 1:
# Do not use this server for commertial software without permission
main('pool.ntp.org')
else:
main(sys.argv[1:])
이것을 파일에 넣으세요 ntp_check.py
. pip install ntplib
또는 특정 배포판( ) 으로 ntplib가 설치되어 있는지 확인하십시오 apt-get install python3-ntplib
. 그런 다음 다음을 사용하여 호출하세요.
python3 ntp_check.py