9/21/2006

Точное время - NTP в Linux

Проблема: Всё вроде было хорошо, всё работало - и тут вы замечаете, что часы на разных компьютерах показывают разное время. Что делать?
Решение: ставим программу ntp, позволяющую быстро синхронизировать часы локального компьютера с серверами точного времени, подсоединёнными ко Всемирной Паутине. Теперь ваши часы в Linux будут всегда показывать точное время, синхронизированное с атомными часами.

Быстро синхронизируем время
Сначала нам бы однократно синхронизировать часы, а уж потом думать о том, как это свалить на компьютер. В Debian GNU/Linux это делается (как и всё прочее) очень просто. Ставим пакеты:
#apt-get install ntp ntpdate
Теперь выбираем сервер точного времени, поближе к вам и не очень загруженный. Список таких серверов можно посмотреть здесь. После чего сервер времени (вместо указанного сервера можно выбрать другой из списка) не мешало бы пощупать:
# ntpdate ntp.remco.org
На что он ответит примерно следующее:
18 Aug 17:32:35 ntpdate[3558]: step time server 80.127.4.179 offset -358.420872 sec
То есть насколько наши часы отстают от правильных. Это мы сейчас устраним. Теперь однократно синхронизируемся с часами на сервере точного времени:
# ntpdate -bs ntp.remco.org
Всё, ваши часы теперь идут точно.
Опять-таки, кроме этого сервера есть ещё куча других, выбирайте ближайший к вам.

Сваливаем синхронизацию времени на компьютер
В принципе, для отдельно стоящей машины можно написать простенький скрипт и запускать время от времени. Дело в том, что если ставить ntp-server на локальной машине, он будет каждый раз при загрузке пытаться связаться с сервером точного времени. Это чревато увеличением времени загрузки на минуту, а то и более. Если уж так хочется - ищем в районе прямой видимости
UNIX-машину, постоянно подключенную к Интернету, и ставим сервер туда, а потом используем её как локальное зеркало точного времени.
Ставим пакет:
#apt-get install ntp-server
После этого лезем в конфиг /etc/ntp.conf и прописываем там правильное зеркало точного времени, например:
server ntplocal.example.com prefer
server timeserver.example.org
server ntp2a.example.net
А можно не лазить, настройки по умолчанию (в Debian, по крайней мере) разумны. При следующей перезагрузке / перезапуске ntp ваши часы снова синхронизируются.

Ссылки:
Краткая справка по настройке возможности получения точного времени здесь. Стоит почитать замечательную статью Линукс, Часы и Время и FreeBSD-шное руководство, в котором, в частности, сделан упор на "серверную" часть ntp.

6 комментариев:

  1. У меня как раз отдельно стоящая машина, стоит ntpdate, синхронизацию при загрузке я отключил так как подключаюсь по ADSL вручную. ntpdate у меня запускается при поднятии интерфейса.

    ОтветитьУдалить
  2. А нельзя при загрузке действовать в параллельном потоке? По идее тогда и не придётся ждать минуту. Если машина редко выключается, то я бы использовал cron.

    ОтветитьУдалить
  3. У меня как раз отдельно стоящая машина, стоит ntpdate, синхронизацию при загрузке я отключил так как подключаюсь по ADSL вручную.
    Дебиановский пакет любит рекомендовать поставить ещё и сервер, который сразу прописывается в стартовых скриптах и начинает усиленно синхронизоваться. ПОэтому я об этом отдельно и сказал.

    А нельзя при загрузке действовать в параллельном потоке?
    По идее можно - в смысле, ntpdate& - это имелось в виду? Мысль, кстати. Но мне сервер пока что не сдался, так что синхронизуюсь иногда... ленивый я :-)

    ОтветитьУдалить
  4. Ага, именно это. Поскольку ntp не влияет ни на что (в отличие от, например, hotplug'а, который лучше так не запускать), то его вполне можно запустить в параллельном потоке.

    ОтветитьУдалить
  5. Есть (теперь?) ntpdate-debian и искать сервера не нужно.

    ОтветитьУдалить
  6. @Igor комментирует...

    Поскольку ntp не влияет ни на что (в отличие от, например, hotplug'а, который лучше так не запускать), то его вполне можно запустить в параллельном потоке.

    Вполне. Но у меня обычная пользовательская машина, так что это не критично. За идею спасибо.

    @paulcarroty комментирует...
    Есть (теперь?) ntpdate-debian и искать сервера не нужно.
    А он же вроде и раньше был (сервер), разве нет?

    ОтветитьУдалить