我有一个 NTP 服务器(Ubuntu),它实际上有一个 America/Mexico_City 时区,直到 2022 年我们每年都会有 2 次时间变化,大多数美国人在 3 月的第二个星期日(凌晨 2:00)将时间调快(将时钟拨快并减少一个小时),在 11 月的第一个星期日(凌晨 2:00)将时间调回(将时钟拨回并增加一个小时),这次时间变化是由 NTP 服务器自动完成的,但在 2022 年 10 月,墨西哥总统宣布从 2023 年开始将不再有时间变化,所以这是自动完成的,我该如何配置 NTP 服务器以便从现在开始不再有任何时间变化?我必须配置一些额外的东西吗?还是会自动反映出来?
我在ntp.conf中默认配置了ubuntu ntp服务器:pool 0.ubuntu.pool.ntp.org iburst pool 1.ubuntu.pool.ntp.org iburst pool 2.ubuntu.pool.ntp.org iburst pool 3.ubuntu.pool.ntp.org iburst
答案1
我认为这里对于 NTP 的实际工作方式存在根本性的误解。
实际的 NTP 协议和 NTP 服务器的工作方式都与时区无关。 也就是说,所有 NTP 服务器都只使用 UTC。该系统查询处理时区偏移等的 NTP 服务器。
这是示例案例——我的笔记本电脑。
以下是此案例的一些信息:我的电脑仅有的已安装 Ubuntu 22.04,Ubuntu 默认安装假定实时时钟计算机/系统/BIOS 中的 (实时时钟) 设置为 UTC。因此,系统本身在timesyncd
此处配置为与 Ubuntu 的时间服务器(NTP 池)同步和我的本地 Stratum 1 NTP 服务器(基本上,通过 GPS 时间脉冲同步连接到时间同步的 NTP 服务器;该服务器的本地时区与我的相同,都是 America/New_York,但这仅适用于系统区域设置,RTC 等使用 UTC,因为 Ubuntu 默认使用 UTC)。
我的系统所做的是向 NTP 服务器查询当前时间并说出我的当前时间(以 UTC 为单位),然后返回当前时间和当前 RTC 时钟的 UTC 偏移量。
我的系统(或在本例中为timesyncd
)将采用此偏移量并将其与系统 RTC 时间进行比较,并根据从 NTP 查询检测到的偏移量调整系统 RTC。
因此,如果 NTP 服务器符合 NTP 规范,则无法将其设置为根据时区规则做出响应 - 这些规则由终端系统及其区域设置控制,而 NTP 服务器及其行为方式完全不受时区偏移的影响- 在 Ubuntu 中,夏令时等时区数据都存储在tzdata
和其他系统实用程序中,因此您真的需要更新您的端点机器如何处理时区偏移和 DST 自动配置 - 这不是 NTP 服务器端功能,而是客户端功能。
(请注意,这就是为什么我可以从美国查询日本的时间服务器,并在我的系统上本地显示我的本地时区,或者从欧洲查询美国服务器并获取正确的系统时间 - NTP 本身并不关心时区偏移,它只使用 UTC。并且 NTP 服务器一般来说都由服务器的分层布局提供信息 - 分层 0 又称通用全球时间,由原子钟提供信息;分层 1 从 GPS 等源获取信息,这些源与分层 0 数据源同步;分层 2 服务器从分层 1 服务器获取信息;分层 3 从分层 2 获取信息,等等。
答案2
对于无法升级 tzdata 的用户,有一个简单的方法可以通过更新 IANA DB 来更新这些数据
wget https://data.iana.org/time-zones/releases/tzdata2023c.tar.gz
tar xvzf tzdata2023c.tar.gz
sudo zic africa
sudo zic antarctica
sudo zic asia
sudo zic australasia
sudo zic europe
sudo zic northamerica
sudo zic southamerica