FreeBSD 对闰秒的支持


1. 简介

闰秒是在特定年份的特定时间对 UTC 进行的一秒调整,以使原子时间尺度与地球自转变化保持同步。本文介绍了 FreeBSD 如何与闰秒交互。

截至本文撰写之时,下一个闰秒将在 2015 年 6 月 30 日 23:59:60 UTC 出现。这个闰秒将发生在北美、南美和亚太地区的营业日。

闰秒由IERS公告 C中宣布。

标准闰秒行为在RFC 7164中进行了描述。另请参阅time2posix(3)

2. FreeBSD 上的默认闰秒处理

处理闰秒最简单的方法是使用 FreeBSD 默认使用的 POSIX 时间规则,并结合NTP。当ntpd(8)正在运行并且时间与正确处理闰秒的上游 NTP 服务器同步时,闰秒将导致系统时间自动重复当天的最后一秒。无需其他调整。

如果上游 NTP 服务器没有正确处理闰秒,ntpd(8)将在有问题的上游服务器注意到并自行调整后将时间向前跳动一秒。

如果未使用 NTP,则在闰秒过去后需要手动调整系统时钟。

3. 注意事项

闰秒在世界各地同时插入:UTC 午夜。在日本,那是上午;在太平洋,那是中午;在美洲,那是下午晚些时候;在欧洲,那是晚上。

我们相信并期望 FreeBSD(如果提供了正确且稳定的 NTP 服务)将在本次闰秒期间按设计工作,就像在之前的闰秒期间一样。

但是,我们提醒您,实际上几乎没有任何应用程序曾经询问过内核有关闰秒的信息。我们的经验是,根据设计,闰秒本质上是闰秒前一秒的重播,这对大多数应用程序程序员来说是一个惊喜。

其他操作系统和其他计算机可能或可能不会以与 FreeBSD 相同的方式处理闰秒,并且没有正确且稳定的 NTP 服务的系统根本不会知道任何有关闰秒的信息。

由于闰秒导致计算机崩溃的情况并不少见,并且经验表明,所有公共 NTP 服务器中很大一部分可能会错误地处理和宣布闰秒。

请尽量确保不会因闰秒而发生任何可怕的事情。

4. 测试

可以测试是否将使用闰秒。由于 NTP 的性质,测试可能在闰秒前 24 小时内有效。一些主要的参考时钟源仅在事件前一小时宣布闰秒。查询 NTP 守护进程

% ntpq -c 'rv 0 leap'

包含leap_add_sec的输出表示对闰秒的支持。在闰秒前 24 小时或闰秒过去后,将显示leap_none

5. 结论

在实践中,闰秒通常不会成为 FreeBSD 上的问题。我们希望此概述有助于阐明预期内容以及如何使闰秒事件更顺利地进行。


上次修改于:2021 年 11 月 3 日,作者 Sergio Carlavilla Delgado