Как заставить обновление часов использовать 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; Дата
Чт 1 янв 00:00:58 UTC 1970
 * Остановка NTP-сервера ntpd [OK]
 * Запуск NTP-сервера [OK]
Чт 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 отлично работает?

ntp
316 голосов | спросил ysap 14 FebruaryEurope/MoscowbThu, 14 Feb 2013 01:58:12 +0400000000amThu, 14 Feb 2013 01:58:12 +040013 2013, 01:58:12

15 ответов


279

Возможно, работает служба 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
до ping -nq-c3 8.8.8.8; делать
   echo «Ожидание сети ...»
сделанный
ntpdate -s time.nist.gov
/etc/init.d/ntp start) &
ответил Eric Carvalho 14 FebruaryEurope/MoscowbThu, 14 Feb 2013 03:13:30 +0400000000amThu, 14 Feb 2013 03:13:30 +040013 2013, 03:13:30
417

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

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

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

ответил Martin Schröder 14 FebruaryEurope/MoscowbThu, 14 Feb 2013 16:32:15 +0400000000pmThu, 14 Feb 2013 16:32:15 +040013 2013, 16:32:15
49

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

sudo sntp -s 24.56.178.140

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

ответил Guest 8 52013vEurope/Moscow11bEurope/MoscowFri, 08 Nov 2013 05:00:47 +0400 2013, 05:00:47
37

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

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

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

# apt-get install fake-hwclock


fake-hwclock: сохранение /восстановление системных часов на машинах без использования оборудования RTC

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

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

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

ответил dfc 4 AMpFri, 04 Apr 2014 02:11:23 +040011Friday 2014, 02:11:23
11

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 удалить ntp

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

ntpdate -sb time.nist.gov

to /etc /rclocal

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

ответил Stephan 14 FebruaryEurope/MoscowbThu, 14 Feb 2013 03:07:06 +0400000000amThu, 14 Feb 2013 03:07:06 +040013 2013, 03:07:06
8
rdate -s tick.greyware.com

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

ответил batflaps 27 FebruaryEurope/MoscowbFri, 27 Feb 2015 01:57:37 +0300000000amFri, 27 Feb 2015 01:57:37 +030015 2015, 01:57:37
7

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

NTPD_OPTS = "- г"

в файле

/и т.д. /по умолчанию /нтп

Это гарантирует, что при запуске 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 3 PMpThu, 03 Apr 2014 15:20:58 +040020Thursday 2014, 15:20:58
4

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

ответил Cry Havok 14 FebruaryEurope/MoscowbThu, 14 Feb 2013 02:18:27 +0400000000amThu, 14 Feb 2013 02:18:27 +040013 2013, 02:18:27
4

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

$ tlsdate -V -n -H encrypted.google.com
ответил Kokizzu 23 FebruaryEurope/MoscowbTue, 23 Feb 2016 14:52:56 +0300000000pmTue, 23 Feb 2016 14:52:56 +030016 2016, 14:52:56
2

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

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

ответил xiaoyifang 29 22016vEurope/Moscow11bEurope/MoscowTue, 29 Nov 2016 11:57:13 +0300 2016, 11:57:13
1

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

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

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

как из http://doc.ntp.org/4.1.0/ntpd. НТМ

-Jonathan Natale

ответил Jonathzen 29 Jam1000000amThu, 29 Jan 2015 00:26:15 +030015 2015, 00:26:15
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 /Баш
# Этот скрипт проверяет, запущен ли процесс ntp, останавливает его, обновляет системное время, снова запускает его

ps cax | grep -c ntpd> /DEV /нуль
OnOff = $?
если ["$ onoff" -gt 0]; тогда
    echo "stopping ntpd ..."
    сервис ntp stop
    echo "ntpd остановился"
еще
    echo "ntpd не работает, готов обновить дату"
фи


isinstalled = $ (dpkg-query -l | grep -c ntpdate)
если ["$ isinstalled" -gt 0]; тогда
    ntpdate -t ​​3 -s ntp4.stratum2.ru
    echo "выполнено обновление даты и времени"
еще
    echo "пакет ntpdate не установлен, не удается обновить с помощью ntp"
фи

echo "перезапуск ntpd ..."
сервис ntp start
echo "ntpd running"
echo "печать текущей даты и времени:"
Дата

Выход
ответил art.shutter 12 SatEurope/Moscow2015-12-12T18:14:18+03:00Europe/Moscow12bEurope/MoscowSat, 12 Dec 2015 18:14:18 +0300 2015, 18:14:18
0

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

ответил G. N. DeSouza 5 J0000006Europe/Moscow 2015, 02:01:45
0

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

ntp-wait || выход -1
# Я считаю, что это приведет к выходу из сценария, если он не удастся, но не уверен в кодах возврата ntp-wait, сначала узнайте об этом.

echo Время синхронизируется, продолжайте резервное копирование
деготь
rsync и т. д.
ответил Anonymous 8 TueEurope/Moscow2015-12-08T10:55:34+03:00Europe/Moscow12bEurope/MoscowTue, 08 Dec 2015 10:55:34 +0300 2015, 10:55:34
0

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

sudo systemctl restart ntp
# или
sudo systemctl restart ntp.service

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

ответил TechJS 21 FebruaryEurope/MoscowbWed, 21 Feb 2018 21:01:10 +0300000000pmWed, 21 Feb 2018 21:01:10 +030018 2018, 21:01:10

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132