如何配置 Unix 系統以在 TAI 時間執行?
我想將 Unix 系統配置為在國際原子時間(TAI) 上執行,以便能夠看到正確報告為 2016-12-31 23:59:60 的年終閏秒。我知道這會導致系統的時間戳與 POSIX 的時間戳不兼容,但我這樣做是作為一個實驗。我已經將時區文件從復製
/usr/share/zoneinfo/right/
到/etc/localtime
. 這些是我的問題。
- 如何準確設置系統時間?我知道它必須設置為 TAI 秒,而不是 UTC 秒。是否可以通過 NTP 做到這一點?目前,系統顯示的時間與正確的時間相差 36 秒。
- 2017-02-01 之後顯示的時間會繼續正確嗎?時
zoneinfo/right
區文件是否需要更新?
時區文件可能需要更新。您可以通過執行命令來測試它以查看已安裝時區文件中的轉換。以下範例包含閏秒轉換。
$ 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
如果時區文件需要更新,並且您的作業系統發行版沒有提供閏秒(/右)時區文件,您可以按如下方式設置時區文件。
- 從https://www.iana.org/time-zones獲取時區分佈,
- 配置和安裝,以及
- 使用如下命令設置正確的區域文件(其中還包括閏秒資訊)
sudo cp
tzdir/etc/zoneinfo-leaps/
你的時區/etc/localtime
要從 NTP 伺服器設置時間,您可以配置和安裝 rdate (openrdate),然後執行命令,例如
sudo rdate -s -c -n 0.gentoo.pool.ntp.org
.
首先,電腦系統上的時鐘必須提供 TAI 或 UTC 的概念並不完全準確。我可以通過時區獲取和設置時間,例如 GNU coreutils date 命令非常靈活。在設置為 right/UTC 的系統上(稍後會詳細介紹):
# date -s "Tue Dec 27 08:16:53 CST 2016" Tue Dec 27 14:16:53 UTC 2016
請參閱 ESR 的文章 Time, Clock, and Calendar Programming In C 了解所涉及的實際資料結構,以及一些很好的參考資料。
您仍然可以像往常一樣配置 ntp、ptp 或發出 well-timed
date
或chronyc settime
命令。但是,您需要了解 TAI - UTC 偏移量以及您的源時間。NTP 時間是標準的 UTC,因此只需在 UTC 同步系統上設置“正確”區域,TAI - 10 - UTC 就會關閉,目前是 26。
相反,一些 NTP 伺服器可以提供 GPS 或 TAI。這加上一些閏秒黑客將擺脫核心或使用者登陸時間同步糾正的閏秒錯誤。請參閱:“正確”tz 數據庫 (zoneinfo) 文件和基於 GPS 的 NTP
請注意,第二天 86401 是非標準的,並且違反了 POSIX 的要求。如果設置執行此操作的 NTP 伺服器,它們將無法為其他系統提供時間。它還可能導致依賴於特定格式時間的應用程序出現奇怪的行為。
TZ 數據需要更新,一年兩次會趕上閏秒。如果您出於這個原因修補閏秒,您將需要再次執行此操作。(很可能由於各種原因,您已經需要比這更頻繁地更新其他軟體。)會有額外的閏秒,地球的自轉變化是物理上的必需品。由於……較少的技術原因,可能的時區和夏令時更改也存在政治必要性。
好時機,因為下一個閏秒是2016 年 12 月 31 日 23h 59m 60s。
如果使用 UTC,Red Hat 發布了一份很好的總結,介紹了在 Linux 上處理它的方法。請注意,許多站點會重複、塗抹或讓 NTP 修復第二個錯誤,而無需顯示第 61 秒。 解決紅帽企業 Linux 中的閏秒問題
這一切對我來說似乎是很多工作。如果我可以讓 NTP 或核心通過 Red Hat 描述的方法來處理它,我寧願看不到第 61 秒。