Для синхронізації часу FreeBSD з іншою системою служить програма ntpdate. зазвичай викликається планувальником cron в задані інтервали часу. Якщо вам потрібно тільки підтримувати ваші годинник при завантаженні машини, ви можете скористатися утилітою ntpdate (8). Крім того, синхронізацію часу може робити демон ntpd. Програма ntpd (8) змінює час поступово, тоді як ntpdate (8) встановлює час незалежно від того, наскільки велика різниця між поточним часом машини і точним часом. Дока man ntpdate каже, що весь функціонал ntpdate тепер реалізований в демона ntpd, і з часом ntpdate припинить існування (перестане поставлятися в дистрибутиві), тому краще відразу використовувати ntpd. Демон ntpd може емулювати поведінка ntpdate, якщо вказати опції -q і -g. при цьому ntpd просто синхронізує час і завершує роботу.
Демон ntpd спеціально призначений для установки і підтримки системного часу в синхронізмі зі стандартними серверами часу в Інтернеті. За замовчуванням використовується протокол NTP (порт 123 UDP) версії 4, але також підтримується сумісність з версіями 3 (RFC-1305), а також 1 і 2 (RFC-1 059 і RFC-1119). Демон ntpd періодично (з налаштованим інтервалом) обмінюється повідомленнями з одним або декількома серверами NTP, доступними в Інтернеті (або в локальній мережі). Якщо різниця часу між локальним хостом і сервером NTP перевищує 1000 секунд, то потрібно вмешательста оператора для ручної установки часу. При цьому в лог пишеться panic-повідомлення, і демон припиняє роботу. Опція -g скасовує таку поведінку (час синхронізується при будь різниці часу), проте якщо синхронізація була неуспішною (різниця в часі перевищує 1000 секунд), ntpd все одно припиняє роботу. Для роботи ntpd може використовувати спеціальний файл для зберігання параметрів догляду годин, за замовчуванням це /etc/ntp.drift. Конфігурація для ntpd за замовчуванням зберігається у файлі /etc/ntp.conf.
Варіантів настройки синхронізації багато, але я вибрав для себе найпростіший режим - запуск ntpd по крону із зазначенням опцій -q і -g. Процес по кроках.
1. Створюємо файл /etc/ntp.conf.
# Touch /etc/ntp.conf
2. Знаходимо і перевіряємо сервера часу. Я знайшов сервера server ntp0.zenon.net, ns.arc.nasa.gov, tick.usno.navy.mil, time.nist.gov.
# Nmap -sU -p123 ntp0.zenon.net
# Nmap -sU -p123 -P0 ns.arc.nasa.gov
# Nmap -sU -p123 tick.usno.navy.mil
# Nmap -sU -p123 time.nist.gov
Серед серверів краще визначити один, до якого найкоротший маршрут (за допомогою утиліти traceroute), щоб його потім вказати в /etc/ntp.conf з опцією prefer. У мене такий сервер виявився ntp0.zenon.net.
3. Додаємо сервера в /etc/ntp.conf
server ntp0.zenon.net prefer
server ns.arc.nasa.gov
server tick.usno.navy.mil
server time.nist.gov
4. Тепер можна синхронізувати час простою командою ntpd -q -g. Тут опція -q вказує ntpd закінчити роботу після синхронізації часу, а опція -g відключає перевірку sanity-інтервалу в 1000 секунд. Цими опціями емулюється поведінку застарілої програми ntpdate.
5. На Red Hat Linux команда ntpd -q -g заробила навіть без створення і редагування файлу /etc/ntp.conf, оскільки після установки цей файл з'явився автоматично. На FreeBSD виявилося все не так гладко - час засінхронізіровалось, але зі зміщенням -3 години. Як я зрозумів, це через те, що неправильно налаштований часовий пояс. Після настройки часового поясу все запрацювало нормально.
6. Додаємо заплановане завдання. Наприклад, для FreeBSD потрібно в файл / etc / crontab додати рядок:
0 1 * * * root ntpd -q -g
Це буде запускати ntpd -q -g кожен день о 01.00
Див. також
man ntpd вбудована дока по ntpd
man ntpdate вбудована дока по ntpdate
man timed вбудована дока по timed
more /etc/defaults/rc.conf | grep ntp приклади конфігурації
man ntp.conf довідка по конфігураційному файлу /etc/ntp.conf демона ntpd