Подробная инструкция к clock(8)

Эта глава сделана на основе предыдущей версии мини-HOWTO и предназначена для тех, кто использует clock(8). Все, что вам надо знать, находится в инструкции.

Замечание

Вы должны зайти в систему в качестве пользователя root для того, чтобы запустить "clock", или другую программу, затрагивающую системное время или ЧРВ.

Проверка настроек

Проверьте ваши загрузочные файлы на наличие команд типа "clock -a" или "clock -ua". В зависимости от дистрибутива, они могут находиться в /etc/rc.local, или /etc/rc.d/rc.sysinit или где-нибудь рядом.

Если в строке написано "clock -s" или "clock -us", смените "s" на "a", и посмотрите, есть ли у вас файл /etc/adjtime, который содержит строку типа:
0.000000 842214901 0.000000

Эти числа являются величиной коррекции (в секундах за день), время, когда была произведена последняя коррекция (в секундах с 1 января, 1970), и часть секунды, которая была округлена последний раз. Если у вас нет этого файла, зайдите как пользователь root и создайте его. В нем должна быть лишь одна строка, содержащая нули:
0.0 0 0.0

Затем запустите "clock -a" или "clock -ua" вручную из командной строки для того, чтобы установить 2-ое число (используйте "u", если ваши часы показывают универсальное время, вместо местного).

Измерение величины коррекции

Для начала вам надо узнать, который час :-). Мой любимый способ - позвонить на WWV по телефону (303)499-7111 (это дорого). Если у вас есть доступ к серверу точного времени, вы можете воспользоваться программой ntpdate, входящей в приложение xntpd (поставьте флажок -b для того, чтобы ядро не сверяло системное время с ЧРВ). Иначе используйте "date -s hh:mm:ss" для установки времени вручную, а затем выполните "clock -w" для того, чтобы синхронизировать ЧРВ с системными часами. Вам потребуется знать, когда вы последний раз устанавливали время на часах, поэтому запишите эту информацию туда, где вы ее не потеряете. Если вы используете ntpdate, напишите "date +%s" и запишите число секунд, прошедших с 1 января 1970 года.

Затем зайдите в систему несколько дней спустя и посмотрите на сколько отклонились ваши часы. Если вы устанавливаете часы вручную, я бы посоветовал подождать две недели и высчитать отклонение в сек/день. После нескольких месяцев высчитайте отклонение в долях секунд за день. Если вы используете ntpdate, то вам придется долго ждать. Но позже можно их точно настроить.

Активируйте синхронизацию "clock -a" через некоторые промежутки времени для того, чтобы время на системных часах и ЧРВ не различалось. Эта команда также будет выполнятся каждый раз при запуске системы. Если вы делаете это часто, то этого будет достаточно для синхронности.

Помните, что в некоторых программах может произойти сбой, если коррекция часов произойдет более, чем на секунду, или, если время будет скорректировано назад. Если возникли подобные проблемы, то используйте xntpd или ntpdate для более плавной корректировки.

Пример

Как установить время

Зайдите как пользователь root. Наберите (303)499-7111 (голос), прослушайте сигналы. Затем напишите:
date -s hh:mm:ss
но не нажимайте Enter, пока не услышите сигнала. (вы можете воспользоваться "ntpdate", вместо "date", и не звонить в этом случае) Эта команда устанавливает системное время. Затем напишите:
clock -w
Эта команда устанавливает ЧРВ по системному времени. Затем наберите:
date +%j
(или "date +%s", если вы используете "ntpdate" вместо "date" ) и запишите число, которое вам понадобится в следующий раз.

Как переустановить время и изменить величину коррекции

Найдите дату, когда вы последний раз устанавливали часы. Зайдите как пользователь root и напишите:
clock -a
Это синхронизирует системное время по ЧРВ. Позвоните по телефону (303)499-7111 (голос), наберите:
date
и нажмите ввод, когда услышите сигнал. Пока вы ждете, запишите точное время. Затем наберите
date hh:mm:00
напишите время на одну минуту вперед и нажмите ввод, когда опять услышите сигнал. Для графы hh поставьте местное время. Итак, вы установили системное время. Теперь наберите:
clock -w
эта команда поставит правильное время в ЧРВ. Напишите:
date +%j
(или "date +%s" в случае прежде описанном)

Теперь у вас есть все для того, чтобы определить величину коррекции.

Как вычислить величину коррекции

Когда вы запускаете "date", определите, забежали ли ваши часы вперед, или они отстают? Если забежали, то придется вычесть несколько секунд, то есть написать их со знаком минус. Если они отставали, то вам придется добавить секунды, то есть записать их с положительным знаком.

Теперь вычтите одну дату из другой. Если использована команда "date +%j", то числа - это дни в году (1-365, или 1-366 в високосном). Если вы использовали команду "date +%s" , то это число в секундах, и вы должны разделить его на 86400, чтобы получить дни.

Если у вас уже есть величина коррекции в /etc/adjtime, то откорректируйте ее в зависимости от полученного результата. Умножьте старую величину на количество дней и прибавьте новую величину.

Затем разделите количество секунд на дни, и получите новую величину коррекции, которую надо записать вместо старой в /etc/adjtime. Запишите количество дней для следующего раза.

/etc/adjtime выглядит примерно так:
-9.600000 845082716 -0.250655
(заметьте, 9.6 секунд в день это почти 5 минут в месяц!)