Как заставить обновление часов с помощью ntp?

298

Я запускаю 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 работает нормально?

    
задан ysap 13.02.2013 в 22:58
источник

15 ответов

259

Вероятно, служба 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 )&
    
ответ дан Eric Carvalho 14.02.2013 в 00:13
источник
379

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

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

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

    
ответ дан Martin Schröder 14.02.2013 в 13:32
48

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

sudo sntp -s 24.56.178.140

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

    
ответ дан Guest 08.11.2013 в 02:00
37

Как указывали другие, лучшим решением является указание 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, записанную во время последней перезагрузки / выключения. Это означает, что вы можете иметь несколько правильные часы в случае возникновения проблем с сетью при загрузке.     

ответ дан dfc 04.04.2014 в 00:11
10

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

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

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

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

UPDATE

Служба

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

# sudo apt-get remove ntp

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

ntpdate -sb time.nist.gov

в /etc/rclocal

Reboot. Должно быть хорошо в этот момент.

    
ответ дан Stephan 14.02.2013 в 00:07
8
rdate -s tick.greyware.com

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

    
ответ дан batflaps 26.02.2015 в 23:57
6

Правильный способ сделать это в 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.

    
ответ дан J G Miller 03.04.2014 в 13:20
4

Попробуйте использовать опцию -b , чтобы поменять время.

    
ответ дан Cry Havok 13.02.2013 в 23:18
3

tlsdate устанавливает локальные часы, надежно подключаясь к TLS к удаленному  серверов и извлечение удаленного времени из безопасного подтверждения. В отличие от  ntpdate, tlsdate использует TCP, например, подключение к удаленному HTTPS или TLS  и обеспечивает некоторую защиту от противников, которые пытаются  сообщите вам информацию о вредоносном времени.

tlsdate -V -n -H encrypted.google.com     

ответ дан Kokizzu 23.02.2016 в 12:52
2

Ссылка

используйте timedatectl для установки времени, ntp устарел.

    
ответ дан xiaoyifang 29.11.2016 в 09:57
1

Алгоритмы ntpd отбрасывают выборки смещения, превышающие 128 мс, если только интервал, в течение которого нет [абсолютного значения] смещения образца меньше 128 мс, превышает 900 с. Первый образец после этого, независимо от того, что сдвиг, выполняет часы на указанное время. На практике это уменьшает частоту ложных срабатываний, когда часы ступают с ошибкой в ​​исчезающе низкую частоту.

Обычно ntpd завершается, если смещение превышает предел здравомыслия, который по умолчанию равен 1000 с. Это можно отключить с помощью опции -g:

-g     Как правило, ntpd завершается, если смещение превышает предел чувствительности, который по умолчанию равен 1000 с. Если предел работоспособности установлен на ноль, проверка работоспособности не выполняется, и любое смещение является приемлемым. Эта опция переопределяет предел и позволяет установить время на любое значение без ограничений; однако это может произойти только один раз. После этого ntpd выйдет, если предел превышен. Этот параметр можно использовать с опцией -q.

как из Ссылка

-Jonathan Natale

    
ответ дан Jonathzen 28.01.2015 в 22:26
1

Ну,

Я запускаю raspbian (debian wheezy) на моем малине pi, у которого нет hwclock. Мне было удобно писать небольшой скрипт и запускать его после моего интернет-интерфейса, так что я уверен, что в тот момент, когда сеть станет доступной, часы будут обновляться.

Сначала проверьте, что у вас есть пакет ntpdate , запустив

sudo apt-get update
sudo apt-get install ntpdate

Вам нужно добавить следующее в ваш /etc/network/interfaces (конечно, eth0 здесь просто пример):

auto eth0
    iface eth0 inet dhcp
    post-up /usr/local/sbin/update-time.sh

И создайте следующий скрипт в /usr/local/sbin/update-time.sh (не забудьте сделать его исполняемым файлом chmod ):

#!/bin/bash
# This script checks if the ntp process is running, stops it, updates the system time, starts it again

ps cax | grep -c ntpd > /dev/null
onoff=$?
if [ "$onoff" -gt 0 ]; then
    echo "stopping ntpd..."
    service ntp stop
    echo "ntpd stopped"
else
    echo "ntpd not running, ready to update the date"
fi


isinstalled=$(dpkg-query -l | grep -c ntpdate)
if [ "$isinstalled" -gt 0 ]; then
    ntpdate -t 3 -s ntp4.stratum2.ru
    echo "date and time update executed"
else
    echo "ntpdate package not installed, can't update using ntp"
fi

echo "restarting ntpd..."
service ntp start 
echo "ntpd running"
echo "printing current date and time:"
date

exit
    
ответ дан art.shutter 12.12.2015 в 16:14
0

ntpd и ntpdate работают по умолчанию с использованием ограниченного порта (UDP 123). Если вы находитесь за брандмауэром, ntpd никогда не будет работать, но ntpdate может работать с опцией -u . Например: ntpdate -u 0.ubuntu.pool.ntp.org или ntpdate -u time.nist.gov должны работать нормально.

    
ответ дан G. N. DeSouza 05.06.2015 в 01:01
0

Если вы можете позволить себе подождать, сколько времени потребуется до синхронизации вашей системы, вы можете использовать команду ntp-wait :

ntp-wait || exit -1 
# i believe this would exit the script if it fails, but not sure of ntp-wait return codes, learn this first.

echo Time is synced, go ahead with backup
tar
rsync etc.
    
ответ дан Anonymous 08.12.2015 в 08:55
0

Если вы находитесь в systemd, вы можете использовать эту команду:

sudo systemctl restart ntp
# or
sudo systemctl restart ntp.service

И тогда время будет обновляться в течение 10-15 секунд.
Протестировано на ubuntu mate 16.04

    
ответ дан TechJS 21.02.2018 в 19:01