Почему часы Ubuntu становятся медленнее или быстрее?

16

Часы Ubuntu выключены примерно на полчаса:

Где я даже начинаю устранять эту проблему?

Он, как утверждается, устанавливается «автоматически из Интернета». Как я могу проверить, что «Интернет» знает, что это за время?

Подробнее

Ubuntu имеет достаточно времени для общения с Интернетом:

$ date; uptime
Fri May 18 05:56:00 PDT 2012
 05:56:00 up 12 days, 10:48,  2 users,  load average: 0.61, 0.96, 1.15

На этот раз сервер , который я нашел через веб-поиск, похоже, знает правильное время:

$ date; ntpdate -q north-america.pool.ntp.org
Fri May 18 05:56:09 PDT 2012
server 208.38.65.37, stratum 2, offset 1752.625337, delay 0.10558
server 46.166.138.172, stratum 2, offset 1752.648597, delay 0.10629
server 205.189.158.228, stratum 3, offset 1752.672466, delay 0.11829
18 May 05:56:18 ntpdate[29752]: step time server 208.38.65.37 offset 1752.625337 sec

Не сообщалось о ошибках, связанных с NTP:

$ grep -ic ntp /var/log/syslog
0

После перезагрузки время автоматически корректировалось, и в /var/log/syslog появилось следующее:

May 18 17:58:12 aux ntpdate[1891]: step time server 91.189.94.4 offset 1838.497277 sec

Журнал смещения, сообщенный ntpdate, показывает, что часы дрейфуют примерно на 9 секунд каждый час:

$ while true; do ntpdate-debian -q | tail -n 1 >> 'drift.log'; sleep 16m; done
^C
$ r -e '
    attach(read.table("drift.log", header=FALSE))
    clock <- as.POSIXct(paste(V1, V2, V3), format="%d %b %H:%M:%S")
    fit <- lm(V10~clock)
    png("drift.png")
    plot(clock, V10, xlab="Clock time", ylab="Time server offset (s)")
    abline(fit)
    mtext(sprintf("Drift rate: %.2f s/hr", fit$coefficients[[2]]*3600))
'

    

задан ændrük 18.05.2012 в 12:59
источник

4 ответа

17

ntp делает все возможное, чтобы ваш компьютер был установлен в нужное время, и делает это, даже не запустив его назад - что было бы плохо для некоторых программ, которые вы могли бы запустить.

Он не только устанавливает время, но и выполняет непрерывную настройку того, как ваш компьютер держит время, так что его время не только сразу в один момент времени, но и остается близким к реальному времени ( в течение нескольких десятков миллисекунд, а не десятки минут). Он регулирует как фазу (время), так и скорость (как быстро «тикает» часы). ntp никогда не заставляет часы работать назад. Это может занять много времени, чтобы установить, как быстро гасить часы после перезагрузки, поэтому ntp отслеживает дрейф в файле с именем /var/lib/ntp/ntp.drift. Поскольку вы не используете ntp, ничего из этого не происходит.

ntp не так популярен, как когда-то, потому что спящие ноутбуки и настольные компьютеры и виртуальные машины перестают работать некоторое время. Он предназначен для работы каждый раз в отдельном расписании на компьютере, который работает все время, и в реальном мире, где время непрерывное. Вероятно, поэтому он не установлен по умолчанию на современной рабочей станции. [Для Vmware см. это]

Вместо этого ntpdate запускается при расширении сетевого интерфейса. Когда спящий ноутбук пробуждается, он восстанавливает сетевое соединение, запускается ntpdate , и время снова правильное. Если аппаратные часы аппарата довольно точны, а сеть довольно часто поднимается и опускается, это обычно достаточно хорошо для большинства людей.

По какой-то причине фондовый ntpdate не запускается. В этом случае используйте ntpdate-debian . Синтаксис for.mer - это что-то вроде ntpdate ntp.ubuntu.com , для последнего это ntpdate-debian

В отсутствие одной из этих вещей ntp - лучший способ сохранить время.

Системы предназначены для периодического прерывания таймера и обновления своего представления о времени каждого прерывания. Пока аппаратный таймер работает в спецификации. время не слишком сильно дрейфует. Если аппаратного таймера нет, время будет дрейфовать больше (все такие часы будут дрейфовать по той же причине, что и ваши часы с наручным часовым механизмом или часы с батареей. Часы, подключенные к стене, синхронизируются с временем по частоте и фазе, поддерживаемой ваша энергетическая компания).

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

Если вы запустили ntp в течение дня или двух, он будет хранить информацию в /var/lib/ntp/ntp.drift, которая указала бы, сколько было бы нужно настроить скорость, с которой время вашей операционной системы увеличивается на одно прерывание, чтобы соответствовать вашей аппаратной частоте с реальным временем, которое она получает через Интернет. Сохранение файла одинаково и только запуск и остановка ntp через минуту после этого (при условии сохранения файла /var/lib/ntp/ntp.drift) может сделать много, чтобы исправить это, если наборы ntp смещения часов остаются после завершения ntp . Я не уверен в этой детали.

Я подозреваю, что значение ntp будет храниться в /var/lib/ntp/ntp.drift намного отличается от моего.

Если этот компьютер работает все время, лучше всего установить ntp и позволить ему делать это. См. Другие ответы для получения подробной информации о получении времени перед его запуском. Я запускаю ntp на своем рабочем столе и ntpdate на своем ноутбуке.

Интересная возможная альтернатива, adjtimex, упоминается в этом ответе nealmcb.

Если ваша система не работает все время, запуск ntpdate во время загрузки кажется хорошим вариантом.

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

Один из них, это может быть проблемой. Насколько я помню, ntp ожидает, что время не зайдет слишком далеко. Если это так, попытка действовать консервативно, ntp не будет корректировать время вообще. Если вы находитесь в такой ситуации, имеет смысл сделать это: запустить ntpdate при загрузке, чтобы получить время, инициализированное в нужное время, а затем запустить ntp , чтобы сохранить он работает для обеспечения точного учета времени. В частности, плохая батарея материнской платы может вызвать эту ошибку, так же как и загрузку компьютера, который был отключен в течение длительного времени.

    
ответ дан John S Gruber 08.06.2012 в 21:24
источник
12

- Обычно время синхронизируется только один раз при каждой загрузке или пробуждении от сна

  

Таким образом, проблема заключается либо в том, что сервер времени Ubuntu по умолчанию (что это такое?) имеет неправильное время, либо Ubuntu не устанавливает время автоматически из Интернета.

Нет, сервер времени Ubuntu верен, и он автоматически устанавливает время.

Проблема заключается в том, что обычно происходит только один раз при каждой загрузке (или, если быть более точным, при каждом появлении сетевого интерфейса ) - от остановки, сна или спящий режим). Основываясь на вашем времени безотказной работы, можно с уверенностью сказать, что он не синхронизирован более чем через неделю. По какой-то причине ваши системные часы работают немного быстро.

- настроить часовое cron для синхронизации, если вы не перезагружаетесь часто, или ваш сервер / рабочий стол никогда не заснет

Лучше всего настроить работу cron, я бы сказал, ежечасно, если вы хотите сверхточное время. Самый простой способ сделать это:

  • sudo editor /etc/cron.hourly/ntpsync

Добавьте следующие строки:

#!/bin/bash

ntpdate ntp.ubuntu.com #or your choice of server
  • сохранить, выйти и sudo chmod +x /etc/cron.hourly/ntpsync

Вы можете поместить это в /etc/cron.daily вместо этого, если хотите, один раз в день.

    
ответ дан izx 18.05.2012 в 14:16
6

Это может произойти, если вы установили демон ntp time и время на вашем компьютере слишком далеко, чтобы быстро исправить.

Чтобы исправить это, откройте терминал и сделайте

  sudo service ntp stop
  sudo ntpdate swisstime.ethz.ch
  date
  sudo service ntp start

Что это делает:

  1. Остановить демон ntp
  2. Установить часы
  3. Время должно быть правильным.
  4. перезапустить демон ntp

Если у вас нет ntp, сделайте это с помощью

  sudo apt-get install update

Обновление: Использование ntpdate в задании cron, как было рекомендовано здесь, приводит к тонким проблемам.

ntpdate будет делать время «прыгать» каждый час или около того. Использование ntp позволяет избежать этой проблемы, поскольку она будет регулировать время, перекосив часы. Кроме того, при выборе ntp-сервера по соседству дает еще более высокую точность, это необязательно. Файл конфигурации ntp по умолчанию имеет несколько серверов, и сервер автоматически компенсирует любые задержки.

Нижняя линия:  - использовать ntp  - если вы далеко, выключение ntp, запустите ntpdate один раз и перезапустите ntp.

    
ответ дан Floyd 18.05.2012 в 13:07
1

У меня была аналогичная проблема, и это было вызвано чем-то в брандмауэре. В итоге я добавил почасовое задание cron , но добавил -u аргумент ntpdate , чтобы использовать его для стандартного порта.

Моя проблема была вызвана тем, что Ubuntu фактически не проверял, работает ли ntpdate , но автоматически предполагает, что он будет работать.

    
ответ дан Axel 13.09.2012 в 23:06