Вопрос: Как заставить обновление часов использовать ntp?


Я запускаю Ubuntu на встроенной системе на базе ARM, в которой отсутствует RTC с поддержкой батареи. Время пробуждения находится где-то в 1970 году. Таким образом, я использую службу NTP для обновления времени до текущего времени.

Я добавил следующую строку: /etc/rc.local файл:

sudo ntpdate -s time.nist.gov

Однако после запуска все еще занимает пару минут, пока не будет обновлено время, в течение которого я не могу эффективно работать с tar а также make,

Как я могу заставить обновление часов в любой момент времени?


ОБНОВЛЕНИЕ 1: Следующее (спасибо Эрику и Стефану) отлично работает из командной строки, но не обновляет часы при вводе /etc/rc.local:

$ date ; sudo service ntp stop ; sudo ntpdate -s time.nist.gov ; sudo service ntp start ; date
Thu Jan  1 00:00:58 UTC 1970
 * Stopping NTP server ntpd     [ OK ] 
 * Starting NTP server          [ OK ] 
Thu Feb 14 18:52:21 UTC 2013

Что я делаю не так?


ОБНОВЛЕНИЕ 2: Я пробовал следовать нескольким предложениям, которые пришли в ответ на первое обновление, но ничто, похоже, действительно не выполняет работу по мере необходимости. Вот что я пробовал:

  1. Замените сервер на us.pool.ntp.org
  2. Использовать явные пути к программам
  3. Удалить ntp службы вообще и оставить sudo ntpdate ... в rc.local
  4. Удалить sudo из приведенной выше команды в rc.local

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

Последнее, что я сделал, это удалить это из rc.local и поместить вызов ntpdate в моем .bashrc файл. Это обновляет часы, как ожидалось, и я получаю истинное текущее время после появления командной строки.

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

Итак, есть ли причина, по которой ntpdate команду в rc.local не выполняет требуемую задачу, делая это в .bashrc работает отлично?


317
2018-02-13 21:58


Источник


от [здесь] [1]: ntpdate -s ntp.ubuntu.com     [1]: askubuntu.com/a/81301/130162 - 18446744073709551615
обратите внимание на флаг -b на ntpdate. Из man-страницы ntpdate: «Настройте время, которое нужно выполнить, используя системный вызов settimeofday (), вместо того, чтобы убивать (по умолчанию) с помощью системного вызова adjtime (). Эта опция должна использоваться при вызове из загрузочного файла во время загрузки». Многие из приведенных ниже ответов не включают в себя и, возможно, часть проблемы в работе. Учтите, что флаг «-B» указывает, что смещения более 128 мс могут занять часы, чтобы синхронизировать, используя механизм «убил» по умолчанию - Matt S.
Нет необходимости использовать sudo в файлах /etc/rc.locale. Они уже запущены как root. - Soren A


Ответы:


Вероятно, ntp служба работает, вот почему ntpdate не может открыть сокет (порт 123 UDP) и подключиться к серверу ntp.

Попробуйте в командной строке:

sudo service ntp stop
sudo ntpdate -s time.nist.gov
sudo service ntp start

Если вы хотите поместить это в /etc/rc.local используйте следующее:

( /etc/init.d/ntp stop
until ping -nq -c3 8.8.8.8; do
   echo "Waiting for network..."
done
ntpdate -s time.nist.gov
/etc/init.d/ntp start )&

281
2018-02-13 23:13



Благодарю. Не могли бы вы объяснить, почему вам нужны явные пути? - ysap
Я действительно не знаю. :-) У меня возникли проблемы с попыткой запустить service из rc.local и cron, но мне удалось исправить его, используя /etc/init.d/xxx. На самом деле, я думаю, вам не нужно полностью ntpdate, Мне нравится использовать полные пути в сценариях, чтобы убедиться, что правильный файл будет найден. - Eric Carvalho
Хорошо, это, по-видимому, проблема. Теперь часы обновляются, как только устанавливается сетевое соединение. Благодарю. - ysap
Я узнал, что us.pool.ntp.org более отзывчив. - ysap
С -u , вам не нужно останавливать службу ntp: sudo ntpdate -u time.nist.gov - Edward Anderson


Вместо ntpdate (который осуждается), используйте

sudo service ntp stop
sudo ntpd -gq
sudo service ntp start

-gq сообщает демону ntp исправить время независимо от смещения (g) и немедленно выйти (q) после установки времени.


417
2018-02-14 12:32



Благодарю. Показывается 1970 после этой команды (w / sudo). чтение ntpd manpage, я не уверен, как это заставляет обновить? - ysap
Опция -q указывает, что NTP-демона запускается, устанавливает время и немедленно выходит. Опция «-g» позволяет корректировать разницу во времени, превышающую 1000 секунд. В долгосрочной перспективе вам нужно просто настроить демон NTP для работы всегда. - tgharold
Этот ответ должен идти в начало, потому что это правильно: ntpdate устарел и установил, что это плохая идея, потому что он конфликтует с ntp. Если часы выключены, вам нужно сделать этот ручной шаг, потому что иначе ntp не изменит ваши часы и не скажет вам, почему. - Liam
Для меня, sudo ntpd -gq не выходит! Я нахожусь на 14.10, и мне нужно CTRL + C продолжить ... или как долго это займет? - Yanick Rochon
FYI, в моей системе (CentOS 6.6) мне нужно было изменить два экземпляра sudo service ntp... в sudo service ntpd..., - rinogo


Используйте sntp, чтобы установить время сразу. Например:

sudo sntp -s 24.56.178.140

Числами после -s может быть любой сервер времени ntp, который является NIST в Ft. Коллинз, штат Колорадо.


49
2017-11-08 01:00



Это сработало! +1 - CappY
Это сработало, когда «sudo ntpd -gq» этого не сделал. - Matt White
Я не знаю, сколько раз я искал этот ответ. Работает каждый раз. - Chaos
не удалось найти пакет sntp? - temple
apt-get install sntp / yum install sntp (да, это работает на CentOS, RedHat, fedore тоже) - ndemou


Как указывали другие, лучшим решением является указание ntpd игнорировать порог паники, который по умолчанию составляет 1000 секунд. Вы можете настроить порог паники одним из двух способов:

  • редактировать /etc/default/ntp и убедитесь, что присутствует опция -g.
  • отредактировать /etc/ntp.conf и поместить tinker panic 0 на вершине

Пока это по существу то, что рекомендовали другие, но есть еще один шаг, который, я думаю, вы должны предпринять. Установите программу fake-hwclock:

# apt-get install fake-hwclock


fake-hwclock: Save/restore system clock on machines without working RTC hardware

 Some machines don't have a working realtime clock (RTC) unit, or no
 driver for the hardware that does exist. fake-hwclock is a simple set
 of scripts to save the kernel's current clock periodically (including
 at shutdown) and restore it at boot so that the system clock keeps at
 least close to realtime. This will stop some of the problems that may
 be caused by a system believing it has travelled in time back to
 1970, such as needing to perform filesystem checks at every boot.

 On top of this, use of NTP is still recommended to deal with the fake
 clock "drifting" while the hardware is halted or rebooting.

При установке fake-hwclock ваша машина не запустится, думая, что это 1970 год снова и снова. Когда ваш компьютер загрузится, он установит свои часы на отметку времени fake-hwclock, записанную во время последней перезагрузки / выключения. Это означает, что вы можете иметь несколько правильные часы в случае возникновения проблем с сетью при загрузке.


37
2018-04-03 22:11



-g казалось, ничего не сделал для меня (в командной строке у меня нет /etc/default/ntp), но добавление tinker panic 0 в ntp.conf работал - Dave Cousineau
@Sahuagin Я не знаю, что сказать вам, кроме того, что у вас есть нестандартный пакет ntp. / etc / default / ntp является частью пакета от Ubuntu: packages.ubuntu.com/xenial/amd64/ntp/filelist и -g был вариантом до тех пор, как я помню. - dfc
извините, я думаю, что я на самом деле не на Ubuntu и должен был подумать немного больше, прежде чем комментировать. tinker panic 0 определенно, похоже, сработало. - Dave Cousineau


ntpdate - это программа, отличная от сети dameon. Вероятно, NTPDate может быть ошибкой при загрузке, потому что ntpd работает в этом сокете.

Из командной строки запустите

# sudo service ntp stop ; sudo ntpdate -s time.nist.gov ; sudo service ntp start

Вы также можете удалить ntpd все вместе (apt-get удалить ntp) и добавить скрипт cron для использования ntpdate каждый час или около того.

ОБНОВИТЬ

Служба ntp, вероятно, не будет иметь значимого значения для вас в этой системе, поэтому сначала удалите это.

# sudo apt-get remove ntp

Теперь добавьте команду:

ntpdate -sb time.nist.gov

в /etc/rclocal 

Перезагружать. Должно быть хорошо в этот момент.


11
2018-02-13 23:07



ответ обновлен. - Stephan
Разве ntpdate не прекращается или что-то еще? Кроме того, если я правильно понимаю это, служба запускает и поддерживает синхронизацию локальных часов с часами сервера, поэтому дрейф связан. Если вы удалите ntp и запустите ntpdate один раз, не будет ли это зависеть от дрифтинга часов, когда машина включена в течение длительных периодов времени? - ysap
Стефан, пожалуйста, см. Обновление № 2 на вопрос. - ysap
Да, ntpdate постепенно прекращается. Использование «ntpd -q» является предпочтительным (оба варианта требуют, чтобы ntpd был остановлен первым). - tgharold


rdate -s tick.greyware.com

если все, что вы хотите сделать, это установить часы один раз, просто


8
2018-02-26 22:57



Благодарю. В настоящее время у меня нет системы для проверки этой команды, но если вы будете следовать обсуждению в вопросе и принятом ответе, вы увидите, что проблема была фактически недоступна сети во время запуска команды обновления часов. - ysap
Это фиксировало проблему синхронизации времени на моей малиновой пи. Спасибо. - Oliver Spryn


Правильный способ сделать это в Debian / Mint / Ubuntu (или другой производной Debian) - это иметь строку

NTPD_OPTS="-g"

в файле

/etc/default/ntp

Это гарантирует, что когда ntpd запускается из сценария /etc/init.d/ntp, он запускается с опцией -g, а именно

 start-stop-daemon --start --quiet --oknodo --pidfile /var/run/ntpd.pid --startas /usr/sbin/ntpd -- -p /var/run/ntpd.pid -g -u 124:128

чтобы ntpd исправлял системное время, когда оно превышает 1000 с, например, когда системное время составляет 1 января 1970 года при запуске, потому что нет аппаратного RTC.


7
2018-04-03 11:20



У меня есть это уже, но он все еще говорит 3AM в Нью-Йорке, когда это должно быть 11 вечера. - chovy
У меня также была точно такая линия в /etc/default/ntp, но время не синхронизировалось. - Dawid Ferenczy


Попробуйте использовать -b вариант для шага времени.


4
2018-02-13 22:18



При попытке из командной строки я получаю следующий ответ: 1 Jan 00:04:11 ntpdate[2226]: the NTP socket is in use, exiting , Тем не менее, я думаю, что я пробовал это раньше rc.local но это не помогло. - ysap
Сначала вам нужно остановить службу ntp, прежде чем вы сможете запустить ntpdate -b <ipaddress> - Wim Deblauwe