RTC 和系统时钟不同步

RTC 和系统时钟不同步

如何设置系统时钟与RTC(硬件时钟/BIOS)同步。我正在编写一个使用系统时钟的脚本,以便通过警报启动系统。

为此,唯一的要求是有一个合适的 RTC 时钟。在我的测试系统 (SLES 10 SP4) 上,我使用 NTP 服务器来管理系统时钟。但RTC时钟始终领先。

例如:当前系统时钟显示 14:00 26.05.2016,RTC 显示16:00小时。我阅读了手册页hwclock,它显示以下命令

hwclock --systohc --localtime

会将 RTC 时钟同步到系统时钟。它确实做到了。

但是在重新启动/关闭后,当系统再次启动时,RTC 再次混乱。因此,当系统重新启动时,还有更多东西可以控制 RTC。

有人能指出我正确的方向吗?提前致谢。

答案1

您可以使用该hwclock命令来设置硬件时钟。
来自男人hwclock page

 --set  Set the Hardware Clock to the time given by the --date option.

您可以使用以下命令将当前系统时间应用于硬件时钟:

hwclock -w

甚至手动使用:

hwclock --set --date "$(date)"

在您向问题添加详细信息后,我的回答还不够,所以下面有更多详细信息。
您可以使用timedatectl status命令检查时区。
列出时区timedatectl list-timezones
您可以将时区设置为 UTC,例如使用timedatectl set-timezone UTC.
您将找到有关时区设置的更多详细信息这里

答案2

如果您的时钟未设置最佳,在systemd基于系统的运行中将timedatectl发出警告:

Warning: The system is configured to read the RTC time in the local time zone.
         This mode can not be fully supported. It will create various problems
         with time zone changes and daylight saving time adjustments. The RTC
         time is never updated, it relies on external facilities to maintain it.

这可以通过以下方式修复:

timedatectl set-local-rtc 0

答案3

我遇到了同样的问题,并使用您引用的命令解决了它:hwclock --systohc --localtime,只需在系统启动时使用 crontab 添加它。

为此,请将命令添加到文件中(我使用 RTC adjustment.sh)

之后,打开终端并chmod 755在脚本的路径上运行,如下例所示:

chmod 755 /home/andavas/Scripts/RTC adjust.sh

然后编辑您的 crontab 文件进行编辑:

crontab -e

(如果您从未运行过此任务,则必须为该任务选择一个编辑器。我建议nano

在文件末尾,插入脚本路径,前面加上@reboot

最后,保存并重新启动系统。

答案4

这取决于您的系统是如何设置的。通常,Unix 期望 RTC 为 GMT/UTC,并且系统知道其偏移量/时区...但这与期望 RTC 为本地时间的旧 Windows 系统不兼容,这会导致多重启动系统出现问题。因此 /etc/default/rcS 中有一个设置可以告诉您的系统是否使用 GMT 时间或本地时间的 RTC(您可能需要后者,这不是默认设置):

# assume that the BIOS clock is set to UTC time (recommended)
UTC=yes

相关内容