有人能解释一下在 UNIX 中或更具体地在 freeBSD 中ntpd
和/etc/localtime
如何system clock
相互作用吗?
我将对这些概念进行详细描述,以防我误解其中的一些概念,以便您指出。我真正的问题在下面。
日期
当我们在 shell 中执行“ date modify
”时,我认为它会修改/etc/localtime
。/etc/localtime
包含日期和时间以及时区信息,这些信息可以通过glibc
类似函数进行查询localtime()
,并且时区也可以通过手动设置tzset()
。
时钟
从网上的其他资料来看,计算机中有两个时钟: 和hardware clock
。system clock
硬件时钟由主板上的电池维持,而系统时钟是一个软件概念。 系统时钟将在系统启动时由硬件时钟设置。 但它可以稍后通过ntpd
(如果我错了请纠正我)进行调整。
ntpd
nptd
是一个用户空间进程,在系统启动后几秒启动。它将查询由配置的某些 ntp 服务器ntp.conf
。它具有缓慢时间漂移调整的特点,不会对时间产生剧烈变化。(但时区呢,ntpd 是否也会查询时区并逐渐改变?这可能需要太长时间。)对于剧烈的时间更新,有一个ntpupdate()
api。
问题
我没有找到任何资源来解释它们之间的相互作用。每个概念似乎都有一些独立的本地文件需要接触和保存。我之所以问这个问题,是因为我观察到,对于我编写的进程,localtime
每次用户要求显示某些数据时都会动态调用,但它并没有反映更新的时区变化date modify
(进程中时间和时区都没有改变)。
答案1
如果我理解正确的话,我认为以下内容回答了你问题的主要问题:
要更改时区,请用目录树/etc/localtime
中的一个文件替换您的/usr/share/zoneinfo
。使用命令设置时间date
不会更改时区,因此不会对/etc/localtime
文件产生任何影响。
请注意,更改时/etc/localtime
区不一定会影响正在运行的进程。如果要确保所有守护进程都能看到新的时区,请重新启动。