Я хочу настроить систему Unix для работы на Международное атомное время (TAI), чтобы иметь возможность увидеть, как правильно указана дополнительная секунда на конец года как 2016-12-31 23:59:60. Я знаю, что из-за этого системные временные метки будут несовместимы с POSIX, но я делаю это в качестве эксперимента. Я уже скопировал файл часового пояса из /usr/share/zoneinfo/right/
к /etc/localtime
. Это мои вопросы.
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 для фактических задействованных структур данных и некоторых хороших ссылок.
Вы по-прежнему можете настроить ntp, ptp или своевременно выдать date
или chronyc settime
команда как обычно.
Однако вам необходимо понимать смещение TAI - UTC и время вашего источника. Время NTP - стандартное UTC, поэтому простая установка «правильной» зоны в системе, синхронизированной с UTC, будет отключена TAI-10-UTC, который в настоящее время равен 26.
Вместо этого некоторые серверы NTP могут предоставлять GPS или TAI. Это плюс некоторые хаки с дополнительной секундой избавят от ошибки секунды координации, исправленной ядром или синхронизацией времени пользователя. Видеть: "правильные" файлы базы данных tz (zoneinfo) и NTP на основе GPS
Помните, что 86401 секундный день нестандартен и противоречит тому, что якобы требует POSIX. При настройке серверов NTP, которые делают это, они не могут предоставить время для других систем. Это также может привести к странному поведению приложений, зависящих от определенного формата времени.
Данные TZ необходимо будет обновлять, дважды в год будут улавливать дополнительные секунды. Если вы исправляете дополнительные секунды по этой причине, вам нужно будет сделать это снова. (Очень вероятно, что вам уже нужно обновлять другое программное обеспечение чаще по разным причинам.) Будут дополнительные дополнительные секунды, изменение вращения Земли является физической необходимостью. Также существует политическая необходимость изменения вероятного часового пояса и перехода на летнее время по… менее техническим причинам.
Хорошее время, так как следующая дополнительная секунда 2016 31 декабря, 23ч 59м 60с.
Red Hat опубликовала хороший обзор способов решения этой проблемы в Linux при использовании UTC. Обратите внимание, что многие сайты повторяют, размазывают или позволяют NTP исправлять вторую ошибку без необходимости показывать 61-ю секунду. Устранение проблем с дополнительной секундой в Red Hat Enterprise Linux
Мне все это кажется большим трудом. Я бы предпочел не видеть 61-ю секунду, если бы я мог позволить NTP или ядру справиться с этим с помощью методов, описанных Red Hat.
Возможно, файлы часовых поясов необходимо обновить. Вы можете проверить это, запустив команду, чтобы увидеть переходы в установленном файле часового пояса. В следующем примере содержится переход в секунду координации.
$ 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
Цдырь/etc/zoneinfo-leaps/
ваш часовой пояс /etc/localtime
Чтобы установить время с сервера NTP, вы можете настроить и установить rdate (openrdate), а затем запустить такую команду, как sudo rdate -s -c -n 0.gentoo.pool.ntp.org
.