如何configuration一个Unix系统在TAI上运行?

我想configuration一个Unix系统在国际primefaces时间 (TAI)上运行,以便能够看到2016-12-31 23:59:60正确报告的年终闰秒。 我知道这会导致系统的时间戳与POSIX的时间戳不兼容,但我正在做这个实验。 我已经将时区文件从/usr/share/zoneinfo/right/复制到/etc/localtime 。 这些是我的问题。

  • 我怎样才能准确地设置系统的时间? 我明白,它必须设置为TAI秒,而不是UTC秒。 是否有可能通过NTP来做到这一点? 目前,系统显示的时间从正确的36秒。
  • 在2017-02-01之后,显示的时间会继续正确吗? 是否需要更新zoneinfo/right时区文件?

首先,计算机系统上的时钟必须提供TAI或UTC的概念并不严格准确。 我可以用时区来设定时间,例如GNU coreutils date命令非常灵活。 在系统设置为正确/ UTC(稍后更多):

 # date -s "Tue Dec 27 08:16:53 CST 2016" Tue Dec 27 14:16:53 UTC 2016 

查看ESR的文章“ 时间,时钟和日历编程”在C语言中涉及的实际数据结构,以及一些很好的参考。

您仍然可以chronyc settimeconfigurationntp,ptp或者发布适时的date或者chronyc settime命令。

但是,您需要了解TAI – UTC偏移量以及您的源时间。 NTP时间是标准的UTC,所以只需在UTC同步系统上设置一个“右”区域,TAI-10-UTC就是目前的26个。

相反,一些NTP服务器可以提供GPS或TAI。 这加上一些闰秒将消除内核或用户陆地时间同步纠正的闰秒错误。 请参阅: “right”tz数据库(zoneinfo)文件和基于GPS的NTP

请注意,第二天的86401是非标准的,违背了POSIX所要求的。 如果设置这样做的NTP服务器,他们不能为其他系统提供时间。 它也可能导致依赖于特定格式化时间的应用程序的奇怪行为。

TZ数据将需要更新,每年两次将捕捉闰秒。 如果你因为这个原因而修补闰秒,你将需要重新做一次。 (很可能因为各种原因,你已经需要更新其他软件了。)会有更多的闰秒,地球的旋转变化是物理上的必要。 由于技术上的原因,可能的时区和夏时制的变化也是一个政治上的必然。

好时机,下一个闰秒是2016年12月31日23时59分60秒 。
如果使用UTC,红帽发布了一个在Linux上处理它的好方法。 请注意,许多网站重复,拖尾,或让NTP修复错误的第二个,而不需要显示第61秒。 解决红帽企业Linux中的第二个问题

这一切似乎对我来说很多工作。 我宁愿没有看到第61秒钟,如果我可以让NTP或内核通过红帽所描述的方法处理它。

时区文件可能需要更新。 您可以通过运行命令来查看安装的时区文件中的转换来testing它。 以下示例包含一个闰秒转换。

$ zdump -c 2017,2018 -v /etc/localtime /etc/localtime -9223372036854775808 = NULL /etc/localtime -9223372036854689408 = NULL /etc/localtime Sat Dec 31 23:59:60 2016 UT = Sun Jan 1 01:59:60 2017 EET isdst=0 gmtoff=7200 /etc/localtime Sun Jan 1 00:00:00 2017 UT = Sun Jan 1 02:00:00 2017 EET isdst=0 gmtoff=7200 /etc/localtime Sun Mar 26 00:59:59 2017 UT = Sun Mar 26 02:59:59 2017 EET isdst=0 gmtoff=7200 /etc/localtime Sun Mar 26 01:00:00 2017 UT = Sun Mar 26 04:00:00 2017 EEST isdst=1 gmtoff=10800 /etc/localtime Sun Oct 29 00:59:59 2017 UT = Sun Oct 29 03:59:59 2017 EEST isdst=1 gmtoff=10800 /etc/localtime Sun Oct 29 01:00:00 2017 UT = Sun Oct 29 03:00:00 2017 EET isdst=0 gmtoff=7200 /etc/localtime 9223372036854689407 = NULL /etc/localtime 9223372036854775807 = NULL

如果时区文件需要更新,并且操作系统发行版没有提供闰秒(/右)时区文件,则可以按如下方式设置时区文件。

sudo cp tzdir /etc/zoneinfo-leaps/ -leaps /etc/zoneinfo-leaps/ your-timezone /etc/localtime

要设置从NTP服务器的时间,您可以configuration和安装rdate(openrdate),然后运行一个命令,如sudo rdate -s -c -n 0.gentoo.pool.ntp.org