我想使用通用ntpd
守护程序来测试虚拟机是否保持时间,而不让它实际调整时钟。
我在 macOS 系统上的 VirtualBox 中运行 Solaris 11.4(Oracle 的英特尔标准映像),但我无法获得正确同步的时间。令我震惊的是,VM 很可能已经在使用 VirtualBox Guest Additions 来执行此操作(我不知道这是如何工作的),并且我可能会通过ntpd
在来宾中运行来打乱时间保持。
为了测试这一点,我想我ntpd
应该在 Solaris VM 中设置来监控一些公共时间服务器,但不知何故阻止它修改本地时钟。这样我就可以查看loopstats
和peerstats
日志如何随着时间的推移而查看本地时钟是否真的保持良好的时间。
问题是我找不到任何关于如何停止ntpd
调整本地时钟的提示。
我过去也想在我使用openntpd
(来自 OpenBSD)进行实际计时的系统上执行此操作。然后,ntpd
守护进程可以坐在后台进行监控,而不会干扰。但是我当时也找不到任何方法来实现这一点。
我怀疑
ntpd
开箱即用是可能的:ntpd
并不保留“第三个”时钟。(其中前两个是系统时钟和单调时钟)。ntpd
上不仅可以调整当前时间,还可以调整控制系统时钟运行速度的参数。隐含地编写它来监视这些调整的效果。将这两者放在一起,ntpd 不太可能有一种模式可以正确地保持这些参数的值,而无需对时钟进行实时调整,其中唯一可用的时钟是系统时钟。
在您的问题中,您是否确实需要
ntpd
. 任何 [S]NTP 客户端都可以。如果您对一些代码感到满意,那么您可能可以将一些东西放在一起,这将为您轮询服务器而无需重新校准系统时钟。
例如,python 有一个名为ntplib的 NTP 库。打印 60 秒轮询的偏移量的脚本可能如下所示:
把它放在一个文件中
ntp_check.py
。确保您已安装 ntplib,其中一个pip install ntplib
或特定于发行版 (apt-get install python3-ntplib
)。然后调用它:ntpd
了解您必须使用 ntpd,AFAIK 的唯一选项是:
禁用ntp
如手册页所示,
ntp.conf
有可能禁用 ntp反馈循环,或者用外行的话来说:删除计算时间服务器和本地时钟之间的时间校正的能力。ntp.conf
激活此类选项所需的行是:注意:使用此选项时,ntpd 可能给其他系统要求时间参考的时间可能是错误的/关闭的。使用一行
deny
来拒绝来自其他系统的所有时间查询似乎是合理的,除非您想监视来自外部系统的时间漂移(使用拒绝并允许外部系统的 IP)。注意:我并不完全清楚 ntpd 实际上让系统时钟“自由运行”。但是,它是一个记录的选项,因此如果 ntpd 不符合记录的内容,则它是一个错误。
敏思
这是通过设置一行( in
ntp.conf
)来完成的,例如:或其他一些高数字(大于可用或使用的服务器)。
注意:我不清楚内核漂移值是否被重置为 0 以避免时钟缓慢改变值。
disable kernel
额外设置禁用内核规程功能可能是合理的。有关的
ntpd -qn
当
ntpd
服务器运行时ntpq -pn
,可以报告 ntpd 服务器在保持系统时钟同步方面的工作情况。这是记录时差的另一种方法。ntpdate -q
该软件包
ntpdate
(标记为已弃用)可用于检查时差:使用
ntpdate -qu 'pool.ntp.org'
该命令不需要 root 权限即可运行(-u
意味着“使用非特权网络端口”,但可执行文件必须可供用户访问)。sntp
有一个简单的程序可以查询(如果没有使用 -s 或 -S 选项,则不会更改):
日期
该程序
rdate
能够显示远程时间(和本地时间):其中
-n
意味着:使用 SNTP (RFC 2030) 而不是(默认)RFC 868 时间协议;并且,只打印结果而不进行任何实际更改。但是,此程序仅限于整秒(而不是分数)的分辨率。而且,它在 solaris 中没有选项
计时
ntp(chrony)的替换包可以在不设置系统时钟的情况下执行时差测试:
我相信这些都是检测(不改变)互联网ntp时间和系统时间之间时间差的方法。