Является ли коррекция ntpdate атомарной?
У меня есть следующее в /var/log/syslog со вчерашнего дня (30 июля)
Dec 16 22:54:05 omap ntpdate[432]: step time server 91.189.94.4 offset 12052648.821465 sec
ntpdate 91.189.94.4 "исправил" мои часы с 30 июля по 16 декабря! Согласно http://www.pool.ntp.org/scores/91.189.94.4, этот сервер не был отключен более чем на 2 мс.
Теперь у меня есть скрипт, который вызывает date
команда при загрузке системы для установки часов с точностью ~1 с. Грубое время считывается из локальной сети, и date
вызывается, чтобы установить время. Я должен сделать что-то в этом духе, поскольку в системе нет часов реального времени, а Интернет-соединение может быть недоступно для NTP.
Я не уверен, как Linux угадывает начальное время, когда нет доступных часов, но я заметил, что это может быть очень неправильно (что разумно). Моя единственная мысль о том, что произошло:
- Система загрузилась и инициализировала часы, скажем, 15 марта
ntpdate
начал разговаривать с NTP сервером, определяя, насколько неправильно 15 марта сравнивается с реальной датой- Мой скрипт установил системные часы на 30 июля
ntpdate
определили, что часы были медленными 12052648 с, и добавили коррекцию, предполагая, что часы все еще были 15 марта- На 30 июля было добавлено 12052648, что привело к 16 декабря.
Честно говоря, я не слишком знаком с тем, как работает NTP. Разумно ли это? Может ли быть другое объяснение?
3 ответа
Не зная больше о вашей настройке, ваша теория звучит правдоподобно.
Вы захотите изменить свои сценарии запуска, чтобы обеспечить date
команда, которая устанавливает системную дату завершена до ntpdate
начинается.
Я не уверен, как ваши часы попали в состояние, в котором они находятся, но могу я предложить вам исключить скрипт, который вызывает date
команда, если это возможно?
Обычный метод установки системных часов при запуске на большинстве систем, с которыми я работал, это:
- Запустите сеть.
- Начните
ntpd
с-g
синхронизировать часы.
-g
это новая опция, которая позволяет ntpd переводить часы в любое время - если ваша версия ntpd
не поддерживает этот fkag вы бы запустить ntpdate -b some.time.server
до того, как вы запустили демон NTP
Если ваша система настолько старая, что она делает что-то совершенно иное, чем эта, возможно, она настолько старая, что она не поддерживается, поэтому у меня не возникнет никаких сомнений по поводу изменения сценариев запуска, чтобы они стали более разумными...
Почему вы не используете ntpd?
Ntpd гораздо эффективнее проверяет правильность ваших часов, чем ntpdate, потому что он буферизует обновление на более мелкие изменения, чтобы избежать любого шока для системы.
И это определенно не меняет ваши часы на другой месяц случайно!
Я бы дал более точные инструкции о том, как установить и включить ntpd в вашей системе, но вы не указали свой дистрибутив.