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

Некоторые из них являются частью функциональности интерпретатора, над которым вы работаете (я полагаю, вы используете bash), но его можно переопределить тем, который не является встроенным (если такой исполняемый файл существует), используя [ F2] [F3]. Остальные важные команды находятся в /bin или /sbin, которые находятся на вашем пути, что дает быстрый доступ к этим командам почти без проблем.

1
задан 27 February 2015 в 05:00

14 ответов

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

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

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

403
ответ дан 25 May 2018 в 01:30
  • 1
    Благодарю. Показывается 1970 после этой команды (w / sudo). Чтение ntpd manpage, я не уверен, как это заставляет обновить? – ysap 15 February 2013 в 00:42
  • 2
    & Quot; -q " опция сообщает NTP-демону, чтобы установить время, установить время и немедленно выйти. & Quot; -g " опция позволяет корректировать разницу во времени более 1000 сек. В долгосрочной перспективе вам нужно просто настроить демон NTP для работы всегда. – tgharold 9 September 2013 в 23:16
  • 3
    Этот ответ должен идти в начало, потому что это правильно: ntpdate устарел и установил, что это плохая идея, потому что он конфликтует с ntp. Если часы выключены, вам нужно сделать этот ручной шаг, потому что иначе ntp не изменит ваши часы и не скажет вам, почему. – Liam 7 February 2014 в 03:11
  • 4
    Для меня sudo ntpd -gq не выходит! Я нахожусь на 14.10, и мне нужно CTRL + C продолжить ... или как долго это займет? – Yanick Rochon 27 January 2015 в 06:41
  • 5
    FYI, в моей системе (CentOS 6.6) мне нужно было изменить два экземпляра sudo service ntp... на sudo service ntpd.... – rinogo 28 January 2015 в 02:48

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

sudo sntp -s 24.56.178.140

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

49
ответ дан 25 May 2018 в 01:30

Как показали другие, лучшим решением является указание 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
ответ дан 25 May 2018 в 01:30
  • 1
    -g, казалось, ничего не сделал для меня (в командной строке у меня нет /etc/default/ntp), но добавлено tinker panic 0 в ntp.conf – Dave Cousineau 10 August 2017 в 04:36
  • 2
    @Sahuagin Я не знаю, что сказать вам, кроме того, что у вас есть нестандартный пакет ntp. / etc / default / ntp является частью пакета из Ubuntu: packages.ubuntu.com/xenial/amd64/ntp/filelist и -g была опция до тех пор, пока я помню. – dfc 10 August 2017 в 04:52
  • 3
    извините, я думаю, что я на самом деле не на Ubuntu и должен был подумать немного больше, прежде чем комментировать. tinker panic 0 определенно, похоже, сработал. – Dave Cousineau 10 August 2017 в 23:21

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

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

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

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

UPDATE

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

# sudo apt-get remove ntp

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

ntpdate -sb time.nist.gov

- /etc/rclocal

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

11
ответ дан 25 May 2018 в 01:30
  • 1
    ответ обновлен. – Stephan 15 February 2013 в 01:53
  • 2
    Разве ntpdate не прекращается или что-то еще? Кроме того, если я правильно понимаю это, служба запускает и поддерживает синхронизацию локальных часов с часами сервера, поэтому дрейф связан. Если вы удалите ntp и запустите ntpdate один раз, не будет ли это зависеть от дрифтинга часов, когда машина включена в течение длительных периодов времени? – ysap 15 February 2013 в 03:07
  • 3
    Стефан, пожалуйста, см. Обновление № 2 на вопрос. – ysap 16 February 2013 в 03:42
  • 4
    Да, ntpdate постепенно прекращается. Использование "ntpd -q" (оба варианта требуют сначала остановить ntpd). – tgharold 9 September 2013 в 23:17
rdate -s tick.greyware.com

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

8
ответ дан 25 May 2018 в 01:30
  • 1
    Благодарю. В настоящее время у меня нет системы для проверки этой команды, но если вы будете следовать обсуждению в вопросе и принятом ответе, вы увидите, что проблема была фактически недоступна сети во время запуска команды обновления часов. – ysap 27 February 2015 в 04:57
  • 2
    Это фиксировало проблему синхронизации времени на моей малиновой пи. Спасибо. – Oliver Spryn 15 February 2017 в 20:58

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

/etc/default/ntp

была строка

NTPD_OPTS="-g"

] Это гарантирует, что при запуске 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.

6
ответ дан 25 May 2018 в 01:30
  • 1
    У меня есть это уже, но он все еще говорит 3AM в Нью-Йорке, когда это должно быть 11 вечера. – chovy 6 July 2014 в 08:07
  • 2
    У меня также была точно такая строка в /etc/default/ntp, но время не синхронизировалось. – Dawid Ferenczy 10 November 2014 в 22:15

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

4
ответ дан 25 May 2018 в 01:30
  • 1
    При попытке из командной строки я получаю следующий ответ: 1 Jan 00:04:11 ntpdate[2226]: the NTP socket is in use, exiting . Тем не менее, я думаю, что я пробовал это раньше в rc.local, но это не помогло. – ysap 14 February 2013 в 04:28
  • 2
    Прежде чем вы сможете запустить ntpdate -b <ipaddress>, сначала нужно остановить службу ntp, – Wim Deblauwe 26 November 2014 в 17:02

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

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

3
ответ дан 25 May 2018 в 01:30

https://help.ubuntu.com/lts/serverguide/NTP.html#timedatectl

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

2
ответ дан 25 May 2018 в 01:30

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

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

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

как из http://doc.ntp.org/4.1.0/ntpd.htm

-Jonathan Natale [!d5 ]

1
ответ дан 25 May 2018 в 01:30

Ну,

Я использую 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
1
ответ дан 25 May 2018 в 01:30

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

0
ответ дан 25 May 2018 в 01:30

Если вы можете позволить себе подождать, сколько времени потребуется до синхронизации вашей системы, вы можете использовать команду 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.
0
ответ дан 25 May 2018 в 01:30

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

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

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

0
ответ дан 25 May 2018 в 01:30

Другие вопросы по тегам:

Похожие вопросы: