Linux 提供 stime(2) 调用来设置系统时间。然而,虽然这会更新系统时间,但它不会将 BIOS 硬件时钟设置为与新系统时间相匹配。
Linux 系统通常在关机时和定期间隔将硬件时钟与系统时间同步。但是,如果机器在这些自动同步之一之前重新启动,则机器重新启动时的时间将不正确。
设置系统时间时如何确保硬件时钟得到更新?
查看 rtc 手册页以获取详细信息,但如果您以 root 身份登录,则如下所示:
#include <linux/rtc.h>
#include <sys/ioctl.h>
struct rtc_time {
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday; /* unused */
int tm_yday; /* unused */
int tm_isdst;/* unused */
};
int fd;
struct rtc_time rt;
/* set your values here */
fd = open("/dev/rtc", O_RDONLY);
ioctl(fd, RTC_SET_TIME, &rt);
close(fd);
调用 stime() 后,执行以下操作:
system("/sbin/hwclock --systohc");
有关更多信息,请参见 hwclock(8) 手册页。
我还想指出,硬件时钟只能精确到一个点(我见过的系统每天会丢失/增加几秒钟)。
您是否考虑过设置网络时间守护程序以将您的时钟与时间服务器同步?
诚然,这种同步直到守护程序启动后才会发生,因此保持硬件时钟同步也有助于在开机和时间守护程序与时间服务器同步的点之间。
我将从阅读 hwclock 的源代码开始。
如果文本编辑器与 kubuntu 不同(kate 是编辑器中的默认值),请sudo
在终端中使用您自己的命令。
sudo kate /etc/default/rcS
按EnterUTC=yes
为UTC=no