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

14 July 2009 #time #services #daemon

Вас никогда не касалась проблема неточного времени на компьютере? Нет? Ну тогда вам сильно повезло…

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

Существует несколько способов решения данной проблемы. Я как водиться, очень долго пользовался сложным методом… А именно организация собственного сервера точного времени. В дистрибутивах Linux существует целый ряд серверов, основными являются ntpd и openntpd… Последний является портом сервера openbsd, с улучшенной безопасностью и простотой настройки, потому именно его я и использовал.

Устанавливается с помощью пакетного менеджера дистрибутива. Для примера возьму archlinux:

$ yaourt -S openntpd

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

ru.pool.ntp.org

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

Довольно долгое время я использовал данный метод, пока не осознал, что он избыточен для домашней машины… И существует простой метод установки точного времени на компьютере без поддержки в рабочем состоянии отдельного сервиса.

Заключается метод в вызове команды ntpdate. А для того, чтобы не запускать ее руками, заносим вызов команды в crontab:

$ sudo crontab -e

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

*/30 * * * * /usr/bin/ntpdate -uBs ru.pool.ntp.org

После чего нажимаем Esc и два раза на Z для сохранения и закрытия файла.

Данная строка позволит запускать команду ntpdate каждые полчаса. Параметр u позволяет программе использовать непривилегированные порты для синхронизацией с серверами точного времени, что увеличивает безопасность и уменьшает вероятность ошибки. Параметр B позволяет проводить синхронизацию и в том случае, если часы на компьютере спешат/отстают более чем на 128мс. Без использования данного параметра при подобных отклонениях синхронизация просто не будет проводиться. А параметр s позволяет направить вывод программы в syslog, предоставляя тем самым возможность контролировать ее работу.

Естественно, что во втором случае точность часов будет чуть ниже, чем при использовании сервера точного времени. Но и этого вполне достаточно для домашней машины. А что использовать вам – зависит только от вас!