Точное управление временем и датой

Дата и время операционной системы (с этого момента мы будем пользоваться словом "дата" или "время") устанавливается при загрузке специальным скриптом, который считывает значение аппаратных часов, производит вычисление часового пояса (в BIOS не хранится информация о часовом поясе) и устанавливает часы операционной системы. После этого, часы операционной системы и BIOS полностью независимы. Следовательно, через некоторое время между ними может быть разница в несколько секунд. Какие же часы содержат правильное время? Если вы не делали специальных настроек -- ни те, ни другие.

В данном документе мы обсудим, как сделать время этих часов максимально точным.

[Avi Alkalay (avi@unix.sh). Перевод Иван Песин (ipesin@post.Lviv.UA)]


Точное управление временем и датой


Avi Alkalay




Консультант по Linux и открытым стандартам :: Старший разработчик по ИТ и ПО
IBM Linux Impact Team :: ibm.com/linux

Brad Knowles - Предложение использовать pool.ntp.org и NTP-сервера второго уровня (stratum 2)

Kent Borg - Предложение использовать ntpq вместо ntpdc

Yura Moron - Хорошие пояснения по ntpq и ntpdc

Takeo Nakano - Перевод на японский язык

1.0.5 :: 2003-07-05

Перевод на русский: © Иван Песин

История пересмотров
Пересмотр 1.0.5 05 Jul 2003 Revised by: avi
Изменена ссылка на список серверов времени. Добавлен pool.ntp.org.
Пересмотр 1.0.4 21 Dec 2002 Revised by: avi
Добавлены ссылка на японский перевод и список участников.
Пересмотр 1.0.3 24 Aug 2002 Revised by: avi
Исправлены неверная ширина экрана и листингов.
Пересмотр 1.0.2 04 Aug 2002 Revised by: avi
Ссылка на страницу общедоступных серверов времени.
Пересмотр 1.0.1 07 May 2002 Revised by: avi
Окончательная конвертация в XML. Реорганизация файлов.
Пересмотр 1.0 28 Apr 2002 Revised by: avi
Закончен рисунок.
Пересмотр 0.8 27 Apr 2002 Revised by: avi
Заменен пример с ntpdc на ntpq, взят из присланных дополнений.
Пересмотр 0.8.1 20 Apr 2002 Revised by: avi
Улучшение графики. Ссылки на другие места расположения документа.
Пересмотр 0.8 14 Apr 2002 Revised by: avi
Улучшение рисунка NTP.
Пересмотр 0.76 13 Apr 2002 Revised by: avi
Включен рисунок архитектуры.
Пересмотр 0.75 10 Apr 2002 Revised by: avi
Проверена орфография. Используется DocBook XSLT 1.50.
Пересмотр 0.65 31 Mar 2002 Revised by: avi
Обновление до формата XML 4.1.2 DocBook
Пересмотр 0.6 29 Mar 2002 Revised by: avi
Закончено описание механизма часовых поясов в Linux. Написано приложение. Остались рисунки.
Пересмотр 0.4 24 Mar 2002 Revised by: avi
Сделаны все наброски. Написаны все примеры команд.
Пересмотр 0.2 19 Mar 2002 Revised by: avi
Первая версия в DocBook

1. Общие концепции даты и времени

Для определения текущего времени в некотором регионе планеты, компьютеру необходимо знать две вещи:

  1. Правильное всеобщее скоординированное время (UTC, всеобщее время, такое же как и в Гринвиче, но не GMT)

  2. Часовой пояс текущего региона

В компьютерах, кроме того, существуют аппаратные часы, которые используются для установки времени операционной системы.

Дата и время операционной системы (с этого момента мы будем пользоваться словом "дата" или "время") устанавливается при загрузке специальным скриптом, который считывает значение аппаратных часов, производит вычисление часового пояса (в BIOS не хранится информация о часовом поясе) и устанавливает часы операционной системы. После этого, часы операционной системы и BIOS полностью независимы. Следовательно, через некоторое время между ними может быть разница в несколько секунд. Какие же часы содержат правильное время? Если вы не делали специальных настроек -- ни те, ни другие.

В этом документе мы обсудим, как сделать время этих часов максимально точным.


2. Что такое часовые пояса?

Часовые пояса -- это геофизическое деление земного шара на части по 15 градусов каждая, начиная с Гринвича, в Англии. Это деление было введено с тем, чтобы помочь людям узнать текущее время в других частях света.

Идею часовых поясов предложил канадский инженер-связист С.Флемминг -- Прим.пер.

В наши дни это деление принимает и политическую окраску, так как иногда людям нужно, чтобы их время совпадало со временем в других, не очень отдаленных, местах. Более того, существует понятие летнего времени, которое позволяет более эффективно использовать световой день.

Часовой пояс обычно определяется правительством государства, либо неким астрономическим институтом, и представляется в виде аббревиатуры из трех или четырех букв. В разделе 2.2 приведены примеры.

Если вы хотите узнать текущее время в разных регионах нашей планеты, это можно сделать на странице timezoneconverter.com.


2.1. Летнее время

По соображениям экономного использования энергии и максимального использования светового дня, правительства создали понятие летнего времени. Наши часы переводятся на час вперед, что позволяет людям эффективней использовать световой день. Фактически, это реализуется в пределах понятия часового пояса. Исходное время (UTC) остается неизменным.

Ниже мы узнаем, как автоматически включать и выключать летнее время в Linux.


2.2. Примеры часовых поясов

Нет ничего лучше примеров:

Таблица 1. Бразильские часовые пояса. Сдвиг относительно UTC

Название и сдвиг Название летнего времени и сдвиг Местоположение
BREST -2:00 BREDT -1:00 Fernando de Noronha
BRST -3:00 BRDT -2:00 Sгo Paulo, Rio, Brasilia, Minas Gerais, North East Region, South Region,etc
BRWST -4:00 BRWDT -3:00 West Region
BRAST -5:00 BRADT -4:00 Acre

Пожалуйста, присылайте дополнительные данные, такие как таблица часовых поясов для США.


2.3. Механизм часовых поясов в Linux

Системы Linux используют динамические часовые пояса GLIBC, основанные на /etc/localtime. Этот файл представляет собой ссылку на (или копию) информационный файл зоны, обычно расположенный в каталоге /usr/share/zoneinfo.

С геофизической точки зрения существуют 60o/15o=24 часовых пояса. Но для упрощения и учета различных политических вариаций (таких как летнее время), в каталоге /usr/share/zoneinfo вы найдете сотни файлов для множества городов и стран, хотя, конечно, не для всех.

В некоторых странах, например в Бразилии, нет фиксированной даты начала летнего времени. Она определяется каждый год, за несколько месяцев до начала лета, и вы можете оказаться в ситуации, когда придется изменять информационный файл зоны, созданный командой zic из текстового файла, пример которого приведен ниже.

(А я считал, что это только у нас в стране [читающий выбирает свою страну] такой бардак. :) Прим.ред.)

Пример 1. Текстовый информационный файл бразильских часовых поясов

# Brazil Time Zones
#
# Brazilian Time Zones are:
# BREST: East of Brasilia. Fernando de Noronha.
# BRST:  Brasilia, Sгo Paulo, Rio, Northeast, South etc
# BRWST: West of Brasilia. Mato Grosso, Manaus
# BRAST: Acre.
#
# In daylight saving time, letter 'S' changes to 'D'.
#
# To install, make:
#
# # zic Brazil.txt
#
# Zone files will be installed in /usr/share/zoneinfo (depends on your
# distribution). Then, make a symbolic link from your zone to /etc/localtime:
#
# # ln -sf /usr/share/zoneinfo/Brazil/Brasilia /etc/localtime
#
#
# If you have updates and new standards to this file please send to
#
# Avi Alkalay <avi @ unix.sh>
#
# Last update: 18 Nov 2000
# This file is available at http://avi.alkalay.net/linux/zoneinfo/
#

# Rule  NAME    FROM  TO    TYPE  IN    ON   AT    SAVE   LETTER/S
Rule    Brazil  1931  1932  -     Oct   3    0:00  1:00   D
Rule    Brazil  1932  1933  -     Mar   31   0:00  0      S
Rule    Brazil  1949  only  -     Dec   1    0:00  1:00   D
Rule    Brazil  1950  only  -     Apr   30   0:00  0      S
Rule    Brazil  1950  1952  -     Dec   1    0:00  1:00   D
Rule    Brazil  1951  only  -     Apr   16   0:00  0      S
Rule    Brazil  1952  only  -     Mar   31   0:00  0      S
Rule    Brazil  1953  only  -     Feb   28   0:00  0      S
Rule    Brazil  1963  only  -     Oct   23   0:00  1:00   D
Rule    Brazil  1964  only  -     Mar   1    0:00  0      S
Rule    Brazil  1965  only  -     Jan   31   0:00  1:00   D
Rule    Brazil  1965  only  -     Mar   31   0:00  0      S
Rule    Brazil  1965  only  -     Dec   1    0:00  1:00   D
Rule    Brazil  1966  1968  -     Mar   1    0:00  0      S
Rule    Brazil  1966  1967  -     Nov   1    0:00  1:00   D
Rule    Brazil  1984  only  -     Nov   2    0:00  1:00   D
Rule    Brazil  1985  only  -     Mar   15   0:00  0      S
Rule    Brazil  1985  only  -     Nov   2    0:00  1:00   D
Rule    Brazil  1986  only  -     Mar   15   0:00  0      S
Rule    Brazil  1986  only  -     Oct   25   0:00  1:00   D
Rule    Brazil  1987  only  -     Feb   14   0:00  0      S
Rule    Brazil  1987  only  -     Oct   25   0:00  1:00   D
Rule    Brazil  1988  only  -     Feb   7    0:00  0      S
Rule    Brazil  1988  only  -     Oct   16   0:00  1:00   D
Rule    Brazil  1989  only  -     Jan   29   0:00  0      S
Rule    Brazil  1989  only  -     Oct   15   0:00  1:00   D
Rule    Brazil  1990  only  -     Feb   11   0:00  0      S
Rule    Brazil  1990  only  -     Oct   21   0:00  1:00   D
Rule    Brazil  1991  only  -     Feb   17   0:00  0      S
Rule    Brazil  1991  only  -     Oct   20   0:00  1:00   D
Rule    Brazil  1992  only  -     Feb   9    0:00  0      S
Rule    Brazil  1992  only  -     Oct   25   0:00  1:00   D
Rule    Brazil  1993  only  -     Jan   31   0:00  0      S
Rule    Brazil  1993  only  -     Oct   17   0:00  1:00   D
Rule    Brazil  1994  only  -     Feb   20   0:00  0      S
Rule    Brazil  1994  only  -     Oct   16   0:00  1:00   D
Rule    Brazil  1995  only  -     Feb   19   0:00  0      S
Rule    Brazil  1995  only  -     Oct   15   0:00  1:00   D
Rule    Brazil  1996  only  -     Feb   11   0:00  0      S
Rule    Brazil  1996  only  -     Oct   06   0:00  1:00   D
Rule    Brazil  1997  only  -     Feb   16   0:00  0      S
Rule    Brazil  1997  only  -     Oct   06   0:00  1:00   D
Rule    Brazil  1998  only  -     Mar   01   0:00  0      S
Rule    Brazil  1998  only  -     Oct   11   0:00  1:00   D
Rule    Brazil  1999  only  -     Feb   21   0:00  0      S
Rule    Brazil  1999  only  -     Oct   03   0:00  1:00   D
Rule    Brazil  2000  only  -     Feb   27   0:00  0      S
Rule    Brazil  2000  only  -     Oct   8    0:00  1:00   D
Rule    Brazil  2001  only  -     Feb   18   0:00  0      S


# Zone  NAME                          GMTOFF  RULES/SAVE    FORMAT  [UNTIL]
Zone    Brazil/DeNoronha              -2:00   Brazil        BRE%sT
Zone    posix/Brazil/DeNoronha        -2:00   Brazil        BRE%sT
Zone    right/Brazil/DeNoronha        -2:00   Brazil        BRE%sT
Zone    Brazil/East                   -2:00   Brazil        BRE%sT
Zone    posix/Brazil/East             -2:00   Brazil        BRE%sT
Zone    right/Brazil/East             -2:00   Brazil        BRE%sT

Zone    America/Sao_Paulo             -3:00   Brazil        BR%sT
Zone    America/Rio_de_Janeiro        -3:00   Brazil        BR%sT
Zone    America/Brasilia              -3:00   Brazil        BR%sT
Zone    posix/America/Sao_Paulo       -3:00   Brazil        BR%sT
Zone    posix/America/Rio_de_Janeiro  -3:00   Brazil        BR%sT
Zone    posix/America/Salvador        -3:00   Brazil        BR%sT
Zone    posix/America/Brasilia        -3:00   Brazil        BR%sT
Zone    posix/Brazil/Central          -3:00   Brazil        BR%sT
Zone    posix/Brazil/Brasilia         -3:00   Brazil        BR%sT
Zone    posix/Brazil/Sao_Paulo        -3:00   Brazil        BR%sT
Zone    posix/Brazil/Salvador         -3:00   Brazil        BR%sT
Zone    posix/Brazil/Rio_de_Janeiro   -3:00   Brazil        BR%sT
Zone    right/America/Sao_Paulo       -3:00   Brazil        BR%sT
Zone    right/America/Rio_de_Janeiro  -3:00   Brazil        BR%sT
Zone    right/America/Salvador        -3:00   Brazil        BR%sT
Zone    right/America/Brasilia        -3:00   Brazil        BR%sT
Zone    right/Brazil/Central          -3:00   Brazil        BR%sT
Zone    right/Brazil/Brasilia         -3:00   Brazil        BR%sT
Zone    right/Brazil/Sao_Paulo        -3:00   Brazil        BR%sT
Zone    right/Brazil/Salvador         -3:00   Brazil        BR%sT
Zone    right/Brazil/Rio_de_Janeiro   -3:00   Brazil        BR%sT
Zone    Brazil/Central                -3:00   Brazil        BR%sT
Zone    Brazil/Brasilia               -3:00   Brazil        BR%sT
Zone    Brazil/Sao_Paulo              -3:00   Brazil        BR%sT
Zone    Brazil/Rio_de_Janeiro         -3:00   Brazil        BR%sT
Zone    Brazil/Salvador               -3:00   Brazil        BR%sT

Zone    Brazil/West                   -4:00   Brazil        BRW%sT
Zone    Brazil/Manaus                 -4:00   Brazil        BRW%sT
Zone    Brazil/Rondonia               -4:00   Brazil        BRW%sT
Zone    Brazil/Roraima                -4:00   Brazil        BRW%sT
Zone    Brazil/Mato_Grosso            -4:00   Brazil        BRW%sT
Zone    posix/Brazil/Manaus           -4:00   Brazil        BRW%sT
Zone    posix/Brazil/Mato_Grosso      -4:00   Brazil        BRW%sT
Zone    right/Brazil/Manaus           -4:00   Brazil        BRW%sT
Zone    right/Brazil/Mato_Grosso      -4:00   Brazil        BRW%sT
Zone    posix/America/Manaus          -4:00   Brazil        BRW%sT
Zone    right/America/Manaus          -4:00   Brazil        BRW%sT

Zone    Brazil/Acre                   -5:00   Brazil        BRA%sT
                                

Блок Rule определяет дату и время изменения часового пояса; в блоке Zone мы ссылаемся на Rule, которым будем руководствоваться. Обратите внимание, что имя записи Zone в действительности соответствует имени файла относительно каталога /usr/share/zoneinfo. В файле определено несколько различных имен для одного и того же часового пояса, просто для того, чтобы людям легче было найти их часовой пояс.

Комментарии в этом файле поясняют, как установить часовой пояс с помощью компилятора zic (который уже включает описания часовых поясов). Чтобы активизировать установленный часовой пояс, вам остаётся создать ссылку (или копию) на информационный файл зоны в /etc/localtime. В некоторых дистрибутивах применяется более высокоуровневый (и предпочтительный) подход к установке часового пояса, описанный в разделе 3.1.

После того, как файл /etc/localtime начнет ссылаться на верный информационный файл зоны, система сразу же начинает обрабатывать время в соответствии с правилами выбранного часового пояса, а переход на летнее время будет осуществляться автоматически -- вам ничего не нужно менять вручную.

Следующий набор команд демонстрирует гибкость механизма часовых поясов в Linux. Обратите внимание, что все команды были выполнены менее чем за одну минуту:

bash$ ls -al /etc/localtime
lrwxrwxrwx  1 root root 35 May 22  2001 /etc/localtime -> 
/usr/share/zoneinfo/Brazil/Brasilia
bash$ date
Fri Mar 29 20:13:38 BRST 2002
bash# ln -sf /usr/share/zoneinfo/GMT /etc/localtime
bash$ date
Fri Mar 29 23:13:47 GMT 2002
bash# ln -sf /usr/share/zoneinfo/Brazil/Brasilia /etc/localtime
bash$ date
Fri Mar 29 20:14:03 BRST 2002

В 20:13 я находился в своем бразильском часовом поясе (BRST). Я переключился в часовой пояс GMT и мое время изменилось на 23:13! Когда в вашем часовом поясе подходит дата перехода на летнее время, происходит нечто подобное, но без смены часового пояса ( т.е. ссылка /etc/localtime не меняется, как в приведенном примере).

Приложения, запущенные на машине (например, веб-сервер, генерирующий журнал доступа) почувствует такое изменение, потому очень важно, чтобы разработчики помнили: концепция полного времени -- это текущее время, плюс текущий часовой пояс, как описано в разделе 1.

В конце примера я вернулся к своему часовому поясу.


3. Корректная настройка вашей системы Linux

Для любой операционной системы вам нужно знать ваш часовой пояс. Он соответствует вашему городу или стране. Кроме того, вам нужно будет решить, как установить время в BIOS. Могу вам предложить две стратегии:

Машина только для Linux

В этом случае установите время в BIOS равным всеобщему скоординированному времени (UTC). Переходы на летнее время будут автоматически выполняться в соответствии с настройками часового пояса.

Машина с двумя ОС: Linux и MS Windows

Windows работает со временем более примитивно, чем Linux. Для Windows время в BIOS -- это всегда ваше местное время, а переход на летнее время более агрессивный, поскольку при этом вносятся изменения в аппаратные часы. А поскольку как Linux, так и Windows при загрузке получают время из аппаратных часов, в случае двух ОС на одном компьютере, Linux должен обрабатывать его таким же образом, как и Windows. Потому устанавливайте время в BIOS равным вашему местному времени.


3.1. Установка часового пояса

В Red Hat Linux и её производных, установить часовой пояс можно с помощью утилиты timeconfig, которая имеет приятный пользовательский интерфейс. Но можно ее использовать и в пакетном режиме:

Пример 2. Утилита конфигурирования часового пояса

bash# timeconfig "Brasil/East"   # установить время аппаратных 
часов равным местному, а часовой пояс -- "Brazil/East"
bash# timeconfig --utc "Brasil/East"   # установить время 
аппаратных часов равным UTC, а часовой пояс -- "Brazil/East"

В любом варианте, утилита меняет файл /etc/sysconfig/clock, который считывается при загрузке. Его можно отредактировать и вручную, вот как он выглядит:

Пример 3. Файл /etc/sysconfig/clock

ZONE="Brazil/East"
UTC=true
ARC=false

3.2. Установка аппаратных часов

Я советую вам устанавливать ваши аппаратные часы, только если вы понимаете, как настроить точное время (это описано в разделе 4).

Команда hwclock читает и устанавливает аппаратные часы на основании переданных ему параметров. Доступные параметры описаны в странице руководства команды. Но если вы используете современный дистрибутив, вам не нужно пользоваться этой командой. После того, как вы решите, какое время хранить в аппаратных часах и выберете часовой пояс, для установки аппаратных часов можно будет использовать высокоуровневую команду setclock. Вам не нужно передавать параметры команде setclock, она сама выбирает параметры, которые нужно передать hwclock на основании ваших установок в операционной системе. Так что всегда стоит проверять наличие команды setclock.

Но если вы минималист и любите тяжелый труд, вот несколько примеров использования hwclock:

(Для усиления эффекта "тяжёлого труда" рекомендуется отжаться 24 раза. По числу часовых поясов. ;)) Прим.ред.)

Пример 4. Использование setclock и hwclock

bash# setclock                                      # Простейший 
метод установки аппаратных часов
bash# hwclock                                       # считывает 
время из аппаратных часов
bash# hwclock --systohc --utc                       # 
устанавливает время аппаратных часов равным UTC на основании системного 
времени 
bash# hwclock --systohc                             # 
устанавливает время аппаратных часов равным местному на основании системного  
времени
bash# hwclock --set --date "22 Mar 2002 13:17"      # 
устанавливает время аппаратных часов равным указанной строке

Поскольку время ОС независимо от аппаратных часов, любые изменения в BIOS будут учтены при следующей загрузке.

Другим вариантом изменения времени в аппаратных часах -- это доступ в BIOS при загрузке системы. На платформах IBM e-server zSeries это нужно делать на уровне z/VM, потому что Linux работает в виртуальной машине, созданной z/VM.


4. Точная мировая синхронизация времени

Точное время на всех ваших системах также важно, как и серьезная стратегия сетевой безопасности (для достижения которой нужно много больше простых брандмауэров). Точное время является одним из главных компонентов системного администрирования, основанного на хорошей практике, которое ведет к организованности и безопасности. В администрировании распределенных приложений, веб-сервисов и наблюдении за безопасностью, точное время -- это необходимость.


4.1. NTP: Сетевой протокол времени (Network Time Protocol)

Здесь мы не будем останавливаться на подробностях реализации этого протокола, а сосредоточимся на том, как это замечательное изобретение, соединенное со всепроникаемостью Интернета, может быть нам полезно. За дополнительной информацией, обращайтесь на сайт www.ntp.org.

После настройки NTP будет поддерживать точность времени, выполняя очень маленькие корректировки часов, такие маленькие, что они никак не будут влиять на работающие приложения.

Точное время можно получить с помощью специальной аппаратуры, основанной на частоте электронных переходов в атомах или циклотронах. Также существует метод, основанный на GPS (Global Positioning System, глобальной системе позиционирования). Первый способ более точный, но и второй весьма неплох. Оба способа требуют специализированного и дорогого оборудования, но их владельцы (обычно университеты и исследовательские лаборатории) подключают это оборудование к компьютерам, на которых запущен демон NTP. Зачастую эти же машины подключены к Интернету, что в конечном итоге дает нам возможность бесплатно узнавать точное время.


4.2. Построение простой архитектуры синхронизации времени

Вам понадобится:

  1. Прямое или непрямое (через брандмауэр) соединение с Internet.

  2. Выберите несколько NTP-серверов. Можно использовать общедоступный сервер pool.ntp.org, либо выбрать несколько серверов из списка серверов времени второго уровня на сайте NTP. Если у вас нет доступа к Internet, ваш администратор WAN (должен быть толковым парнем) сможет сообщить вам какой-то внутренний адрес.

  3. На всех системах, которые вы хотите синхронизировать, должен быть установлен пакет NTP. Пакет RPM можно найти на компакте вашего любимого дистрибутива, или же поищите на сайте rpmfind.net.

    (Не RPM'ом единым жив Linux. Прим.ред.)

Вот пример хорошей архитектуры:

Рисунок 1. Локальные релейные сервера для NTP

Если вам нужно синхронизировать время на нескольких машинах, не задавайте им всем в качестве сервера выбранные NTP-сервера. Только лишь две машины должны иметь доступ к удаленным NTP-серверам, остальные машины будут синхронизироваться с этими двумя. Мы будем их называть релейными серверами.

Релейными серверами может стать любая из машин в вашей сети. NTP занимает мало памяти и процессорного времени. Вам не нужно иметь выделенную машину.

Tip

Хорошая мысль создать псевдонимы для ваших локальных релейных серверов, например ntp1.my.com и ntp2.my.com, а на клиентах использовать только эти имена. Тогда вы сможете при необходимости легко перенести функции релейного сервера на другую машину (с другим IP-адресом и именем) без переконфигурации клиентов. Попросите вашего администратора DNS создать такие псевдонимы.


4.3. Конфигурации NTP

Для ваших релейных серверов

Отредактируйте файл /etc/ntp.conf и добавьте выбранные сервера:

Пример 5. Файл /etc/ntp.conf на релейных серверах

 .
 .
server  otherntp.server.org     # Сервер первого уровня в домене server.org
server  ntp.research.gov        # Сервер второго уровня в домене research.gov
 .
 .

Опять таки, можно использовать сервер pool.ntp.org или любой из списка общедоступных серверов времени на сайте NTP.

Для ваших клиентов

Отредактируйте файл /etc/ntp.conf и добавьте свои релейные сервера:

Пример 6. Файл /etc/ntp.conf на клиентских машинах

 .
 .
server  ntp1.my.com             # Первый локальный релей
server  ntp2.my.com             # Второй локальный релей
 .
 .

Если UTC-время вашей машины отличается от времени на NTP-сервере больше чем на минуту, NTP работать не будет. Так что, вам нужно будет выполнить полную синхронизацию времени. Я рекомендую это делать в нерабочее время. Эта процедура выполняется только один раз, при настройке NTP. Ничего более:

Пример 7. Первая синхронизация

bash# ntpdate otherntp.research.gov       (1)
24 Mar 18:16:36 ntpdate[10254]: step time server 200.100.20.10 offset 
-15.266188 sec
bash# ntpdate otherntp.research.gov       (2)
24 Mar 18:16:43 ntpdate[10255]: adjust time server 200.100.20.10 offset 
-0.000267 sec
(1)
Первая полная синхронизация. Мы опаздывали на 15 секунд.
(2)
Вторая полная синхронизация, для уверенности. Теперь мы фактически не отстаем, что очень хорошо.

Последнее, что нужно сделать -- это запустить или перезапустить демоны NTP на всех машинах:

bash# service ntpd restart

4.4. Наблюдение за синхронизацией

Теперь у вас все настроено. NTP будет держать время в синхронизации. Этот процесс можно наблюдать при помощи команды NTP Query (ntpq):

Пример 8. Состояние синхронизации

bash# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
-jj.cs.umb.edu   gandalf.sigmaso  3 u   95 1024  377   31.681  -18.549   1.572
 milo.mcs.anl.go ntp0.mcs.anl.go  2 u  818 1024  125   41.993  -15.264   1.392
-mailer1.psc.edu ntp1.usno.navy.  2 u  972 1024  377   38.206   19.589  28.028
-dr-zaius.cs.wis ben.cs.wisc.edu  2 u  502 1024  357   55.098    3.979   0.333
+taylor.cs.wisc. ben.cs.wisc.edu  2 u  454 1024  347   54.127    3.379   0.047
-ntp0.cis.strath harris.cc.strat  3 u  507 1024  377  115.274   -5.025   1.642
*clock.via.net   .GPS.            1 u  426 1024  377  107.424   -3.018   2.534
 ntp1.conectiv.c 0.0.0.0         16 u    - 1024    0    0.000    0.000 4000.00
+bonehed.lcs.mit .GPS.            1 u  984 1024  377   25.126    0.131  30.939
-world.std.com   204.34.198.40    2 u  119 1024  377   24.229   -6.884   0.421

Значение каждой колонки

remote

Имя удаленного NTP-сервера. Если указать ключ -n, вы получите IP-адреса серверов вместо имён.

refid

Указывает, откуда каждый сервер получает время в данный момент. Это может быть имя хоста или что-то вроде .GPS., указывающее на источник глобальной системы позиционирования (Global Positioning System).

st

Stratum (уровень) это число от 1 до 16, указывающее на точность сервера. Единица означает максимальную точность, 16 -- сервер недоступен. Ваш уровень будет равен уровню наименее точного удаленного сервера плюс 1.

poll

Интервал между опросами (в секундах). Значение будет изменяться между минимальной и максимальной частотой опросов. В начале интервал будет маленьким, чтобы синхронизация происходила быстро. После того как часы синхронизируются, интервал начинает увеличиваться, чтобы уменьшить трафик и нагрузку на популярные сервера времени.

reach

Восьмеричное представление массива из 8 бит, отражающего результаты последних восьми попыток соединения с сервером. Бит выставлен, если удаленный сервер ответил.

delay

Количество времени (в секундах) необходимого для получения ответа на запрос "который час? ".

offset

Наиболее важное поле. Разница между временем локального и удаленного серверов. В ходе синхронизации это значение должно понижаться, указывая на то, что часы локальной машины идут все точнее.

jitter

Дисперсия (Jitter) -- это мера статистических отклонений от значения смещения (поле offset) по нескольким успешным парам запрос-ответ. Меньшее значение дисперсии предпочтительнее, поскольку позволяет точнее синхронизировать время.

Значение знаков перед именами серверов

-

Означает, что локальный сервис NTP не предпочитает этот сервер

+

Означает, что локальный сервис NTP предпочитает этот сервер

x

Отмечает плохой хост

*

Указывает на текущий наиболее предпочтительный сервер


4.5. Настройка автозапуска демона NTP при загрузке

Вы можете захотеть, чтобы NTP работал все время, даже если вы перезагрузитесь. Тогда на каждой машине выполните такую команду:

bash# chkconfig --level 2345 ntpd on

В результате демон ntp будет автоматически запускаться при загрузке.

Если ваша машина работает длительное время (месяцы, года) работает без перезагрузок, вы обнаружите значительное расхождение между аппаратными и (теперь очень точными) системными часами. Современные дистрибутивы Linux копируют системное время в аппаратные часы каждый раз при останове системы, с помощью механизма, аналогичного команде setclock. Таким образом, при следующей загрузку системное время будет практически точным, как в момент останова системы.


A. Об этом документе

Copyright 2002, Avi Alkalay.

Этот документ должен распространяться согласно GNU Free Documentation License.

Этот документ опубликован в следующих местах:




Copyright © 2002-2003, Avi Alkalay


Оригинал статьи можно найти по адресу: http://gazette.linux.ru.net/rus/articles/managing_accurate_date_and_time.html

[ опубликовано 29/02/2004 ]

Avi Alkalay (avi@unix.sh). Перевод Иван Песин (ipesin@post.Lviv.UA) - Точное управление временем и датой   Версия для печати