假设没有networking时间协议(NTP)守护进程正在运行,我正在编写一个脚本来同步系统时钟和硬件时钟(又名RTC或CMOS时钟)。
我正在虚拟机中运行,并且主pipe不让硬件时钟被来宾改变。
所以在linux中,我可以使用hwclock --hctosys来做到这一点,例如在Debian中:
$ date Thu May 18 00:48:57 UTC 2017 $ date 0401121621 Thu Apr 1 12:16:00 UTC 2021 $ hwclock --hctosys # this set my system clock to the hardware clock back again $ date Thu May 18 00:49:28 UTC 2017
但是我怎么能在FreeBSD上做同样的事情,因为它不提供hwclock实用程序? 我尝试使用adjkerntz -a但它没有工作。 我正在运行FreeBSD 11.0-RELEASE-p9
谢谢你的帮助
检查sysctl machdep.disable_rtc_set 。 它应该是0 ,每次调用settimeofday()都会自动设置硬件时钟。 然后,如果ntpd正在运行,则不必使用单独的命令设置硬件时钟,因为ntpd已经调用了此系统调用。
一般build议见答案1(下面?)。
为了确保ntpd将设置时钟,它应该与-g开关一起运行。 或者,如果你手动执行“ntpd -g -n”。 最后一个开关是确保它不分叉。 第一个设定的时间不pipe。 观看消息并使用^ C退出。 如果不起作用,请尝试使用两个-g开关。
在/etc/rc.conf中启用ntp在启用ntpd的情况下,应该有类似如下的内容。 ntpd_enable =“YES”ntpd_flags =“ – p /var/run/ntpd.pid -f /var/db/ntpd.drift -g -g”
使用命令service ntpd start启动服务
openntpd设置它启动的时间,所以它似乎不需要-g选项。