Как настроить систему 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
файлы часовых поясов должны быть обновлены?
2 ответа
Файлы часового пояса, возможно, должны быть обновлены. Вы можете проверить это, выполнив команду, чтобы увидеть переходы в установленном файле часового пояса. Следующий пример содержит переход в секунду.
$ 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 очень гибкая. В системе, установленной на право /UTC (подробнее об этом позже):
# date -s "Tue Dec 27 08:16:53 CST 2016"
Tue Dec 27 14:16:53 UTC 2016
См. ESR ESSAY Time, Clock и Calendar Programming In 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, которые делают это, они не могут предоставлять время для других систем. Это также может привести к странному поведению приложений, которые зависят от определенного времени форматирования.
Данные ТЗ нужно будет обновлять, два раза в год будут ловить високосные секунды. По этой причине, если вы исправите дополнительные секунды, вам придется сделать это снова. (Скорее всего, вам уже придется обновлять другое программное обеспечение чаще, чем это, по разным причинам.) Будут дополнительные високосные секунды, изменение вращения Земли является физической необходимостью. Существует также политическая необходимость изменения часового пояса и перехода на летнее время по… менее техническим причинам.
Хорошее время, так как следующий скачок - 2016 год, 31 декабря, 23 ч. 59 м. 60-х годов.
Red Hat опубликовал хороший обзор способов борьбы с ним в Linux, если вы используете UTC. Обратите внимание, что многие сайты повторяют, размазывают или позволяют NTP исправить вторую ошибку, не показывая 61-ю секунду. Решить второстепенные проблемы в Red Hat Enterprise Linux
Все это кажется мне большой работой. Я бы предпочел не видеть 61-ую секунду, если бы мог позволить NTP или ядру справиться с этим через методы, описанные Red Hat.