FreeBSD:如何将系统时钟与 bash 中的硬件时钟同步?

FreeBSD:如何将系统时钟与 bash 中的硬件时钟同步?

我正在编写一个脚本,将系统时钟与硬件时钟(又名 RTC 或 CMOS 时钟)同步,假设网络时间协议 (NTP) 守护程序正在运行。

我正在虚拟机中运行,并且主管不允许客户机更改硬件时钟。

因此在 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 实用程序,我该如何在 FreeBSD 上执行相同的操作?我尝试使用,adjkerntz -a但没有成功。我正在运行 FreeBSD 版本 11.0-RELEASE-p9

感谢您的帮助

答案1

检查一下sysctl machdep.disable_rtc_set。应该是的0,并且每次都会自动设置硬件时钟settimeofday()被调用。然后,如果ntpd正在运行,您不必使用单独的命令设置硬件时钟,因为ntpd已经调用了此系统调用。

答案2

请参阅答案 1(如下?)以获得一般建议。

为了确保 ntpd 能够设置时钟,应使用 -g 开关运行它。或者,如果您手动执行“ntpd -g -n”。最后一个开关是为了确保它不会分叉。第一个开关无论如何都会设置时间。查看消息并使用 ^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 选项。

相关内容