@ Карта сайта News Автора!

Bog BOS: Работа со временем

Последние изменения:
2017.05.19: sysadmin: Файловая система zfs под Linux для архива

Последнее изменение файла: 2013.01.31
Скопировано с www.bog.pp.ru: 2017.05.28

Bog BOS: Работа со временем

Системы времени

Используются различные системы отсчета времени, основанные на астрономических наблюдениях, периоде атомных колебаний и смешанные:

Есть модификации UTC:

DUT1 - разница между UTC и UT1 точностью до 0.1 секунды, публикуется еженедельно обсерваторией США.

Юлианский день - номер дня с полудня 1 января 4713 года до н.э. Модифицированный Юлианский день есть Юлианский день - 2400000.5 (т.е. 0 - это начало нашей эры). При этом необходимо указывать систему времени (TAI, UT).

Часы в Linux

В компьютере имеется 2 реализации часов: часы реального времени (Real Time Clock - RTC, CMOS clock, hardware clock, /dev/rtc, /proc/driver/rtc) и системные часы (system clock, software clock). Часы реального времени представляют собой отдельную микросхему, питающуюся от литиевой батарейки (от нее питается также CMOS, хранящий настройки BIOS), и работают независимо от того, включен компьютер или нет. ОС при загрузке (/etc/rc.sysinit) считывает текущее время, после чего ведет свой счетчик времени (системные часы) самостоятельно основываясь на подсчете количества специальных регулярных прерываний (timer interrupt), обычно 100 Гц (1024 Гц). Системное время выражается в числе секунд (и микросекунд или наносекунд) после 00:00:00 January 1, 1970 UTC.

Показания этих часов могут отличаться друг от друга (и от реального времени ;). Чтение и запись RTC, согласование RTC и системного времени осуществляются программой hwclock(8) (в старых версиях Linux clock(8)). hwclock позволяет использовать RTC в режиме UTC или местного времени (см. переменные окружения в /etc/sysconfig/clock). Информация о расхождении хранится в файле /etc/adjtime.

Значение системных часов можно изменять командой date(1), но лучше этого не делать, т.к. многие программы не выносят разрывов и тем более уменьшения показания системных часов (например, старая версия X Window просто зависала при этом; на новой я не проверял ;). NTP (см. ниже) использует плавную подстройку частоты часов для коррекции текущего времени (по умолчанию, в небольших пределах, но их можно расширить). Позднее утилита adjtimex(8) (adjtime в SVR4) была выделена в отдельный пакет (adjtimex-1.11-5 для RH 7.2), что позволяет плавно подстраивать значение системных часов и корректировать их частоту с помощью сигналов точного времени (требуется несколько дней, --log --watch) или сделав пару запросов в день к NTP серверу с помощью ключа --host (полезно при модемном подключении к интернет). Позволяет также согласовать ход аппаратных и системных часов (предлагаемые корректировки можно получить командой: adjtimex --compare, только надо немного подождать). Не стоит использовать одновременно NTP и adjtimex или hwclock --adjust или hwclock --hctosys. Исчезла в RHEL 3 (White Box 3.0, CentOS 3).

Синхронизация времени в Интернет

Стабильность частоты типичного кварцевого генератора невелика (например, зависит от температуры, напряжения, механических деформаций и т.д.), к тому же базовая частота меняется от кристалла к кристаллу (считается допустимым отклонение частоты в 500 PPM, что приводит к уходу системных часов на 40 секунд в день; PPM - одна миллионная). Согласование хода аппаратных и системных часов с помощью adjtimex увеличивает точность хода, но недостаточно для работы сервера.

Системные часы серверов должны быть согласованы (синхронизированы) между собой с большой точностью (при небольшой загрузке - доли секунды) иначе невозможно отслеживать последовательность событий, разбирать журналы сообщений и т.д. Чем больше плотность событий (загрузка сервера), тем более точной должна быть синхронизация. При синхронизации обычно используется система времени UTC. В Интернет (TCP/IP) возможны следующие методы синхронизации:

Часовые пояса

http://tycho.usno.navy.mil/tzones.html
/usr/share/zoneinfo, tzfile(5), zic(8), TZ, /etc/localtime, /etc/sysconfig/clock

Задание в Cisco IOS часового пояса и даты перехода на дневное время.

Формат времени в Unix

Время в UNIX отсчитывается в секундах (микросекундах) с 1 января 1970 года.

Преобразование из внутреннего формата в человеческий:

Преобразование из человеческого времени во внутреннее:

Преобразование времени изменения файла в "лексикографический" вид (20010905122716):

Преобразование времени изменения файла во внутренний формат:

RFC

Ссылки

@ Карта сайта News Автора!

Bog BOS: Работа со временем

Последние изменения:
2017.05.19: sysadmin: Файловая система zfs под Linux для архива

TopList
. С чего начать Проведение специальной оценки условий труда в Москве.
Copyright © 1996-2017 Sergey E. Bogomolov; www.bog.pp.ru (КГБ знает все, даже то что у Вас на диске ;)