Я использую 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
- Используйте явные пути к программам
- Удалить
ntp
сервис вообще и оставить толькоsudo ntpdate ...
вrc.local
- Удалить
sudo
из приведенной выше команды вrc.local
Используя вышеизложенное, машина все еще запускается в 1970 году. Однако при выполнении этого из командной строки после входа в систему (через ssh
) часы обновляются, как только я вызываю их ntpdate
.
Последнее, что я сделал, - удалил это rc.local
и поместил вызов ntpdate
в мой .bashrc
файл. Это обновляет часы, как и ожидалось, и я получаю истинное текущее время, как только доступна командная строка.
Однако это означает, что если машина включена, и ни один пользователь не вошел в систему, то время никогда не будет обновляться. Я, конечно, могу переустановить ntp
службу, чтобы хотя бы часы обновлялись в течение нескольких минут после запуска, но тогда мы вернулись на круги своя.
Итак, есть ли причина, по которой размещение ntpdate
команды в rc.local
не выполняет требуемой задачи, в то время как это .bashrc
работает нормально?
ntpdate -s ntp.ubuntu.com
[1]: askubuntu.com/a/81301/130162sudo
в файлах /etc/rc.locale .. они уже запущены от имени пользователя root.timedatectl
, Но askubuntu.com/questions/832646/...Ответы:
Вероятно,
ntp
служба работает, поэтомуntpdate
не может открыть сокет (порт 123 UDP) и подключиться к ntp-серверу.Попробуйте из командной строки:
Если вы хотите использовать это,
/etc/rc.local
используйте следующее:источник
service
из rc.local и cron, но мне удалось исправить это с помощью /etc/init.d/xxx. На самом деле я думаю, что вам не нужноntpdate
указывать полный путь , мне нравится использовать полные пути в скриптах, просто чтобы убедиться, что нужный файл будет найден.us.pool.ntp.org
более отзывчивый.-u
опцией, вам не нужно останавливать службуsudo ntpdate -u time.nist.gov
Вместо ntpdate (который устарел ) используйте
Команда
-gq
велит демону ntp корректировать время независимо от смещения (g
) и немедленно выходить (q
) после установки времени.источник
ntpd
manpage, я не уверен, как это вызывает обновление?sudo ntpd -gq
не выход! Я на 14.10 и мне нужно CTRL + C, чтобы продолжить ... или сколько времени это займет?sudo service ntp...
наsudo service ntpd...
.Используйте sntp, чтобы установить время немедленно. Например:
Числа после -s могут быть любым сервером времени ntp, то есть NIST в Ft. Коллинз, Колорадо.
источник
Как уже отмечали другие, лучшим решением является указание ntpd игнорировать порог паники, который по умолчанию составляет 1000 секунд. Вы можете настроить порог паники одним из двух способов:
/etc/default/ntp
и убедитесь, что опция -g присутствует.tinker panic 0
вверхуПока это, по сути, то, что рекомендовали другие, однако, я думаю, вам следует сделать еще один шаг. Установите программу fake-hwclock:
С установленным fake-hwclock ваша машина не запустится, думая, что это снова 1970 год. Когда ваша машина загрузится, она установит для своих часов метку времени, которую fake-hwclock записал во время последней перезагрузки / завершения работы. Это означает, что вы можете иметь несколько правильные часы на случай, если при загрузке возникнут проблемы с сетью.
источник
-g
казалось, ничего не делает для меня (в командной строке, я не имею/etc/default/ntp
), но добавлениеtinker panic 0
кntp.conf
работалиtinker panic 0
определенно, похоже, сработало.ntpdate - это программа, отличная от net dameon. NTPDate, вероятно, выдает ошибку при загрузке, потому что ntpd работает на этом сокете.
Из командной строки запустите
Вы также можете удалить ntpd все вместе (apt-get remove ntp) и добавить скрипт cron для использования ntpdate каждый час или около того.
ОБНОВИТЬ
Сервис ntp, вероятно, не будет иметь значимого значения для вас в этой системе, поэтому сначала удалите его.
Теперь добавьте команду:
в
/etc/rclocal
Перезагрузка. Должно быть хорошо в этот момент.
источник
Используйте
timedatectl
(системный сервисный модуль), чтобы установить время.ntp
не рекомендуется.Вы можете проверить время было обновлено, читая журналы с
journalctl -xe | tail
Ссылка
man timesyncd.conf
источник
если все, что вы хотите сделать, это установить часы один раз, просто
источник
Правильный способ сделать это в системе Debian / Mint / Ubuntu (или другой производной от Debian) - это получить строку
в файле
Это гарантирует, что когда ntpd запускается из скрипта /etc/init.d/ntp, он запускается с опцией "-g", то есть
чтобы позволить ntpd корректировать системное время, когда оно превышает 1000 с, например, когда системное время 1 января 1970 года при запуске, потому что нет аппаратного RTC.
источник
/etc/default/ntp
, но время не было синхронизировано.tlsdate
устанавливает локальные часы путем безопасного соединения с TLS с удаленными серверами и извлечения удаленного времени из безопасного рукопожатия. В отличие от этогоntpdate
,tlsdate
использует TCP, например, для подключения к удаленной службе HTTPS или TLS, и обеспечивает некоторую защиту от злоумышленников, которые пытаются передать вам вредоносную информацию о времени.источник
Обратите внимание, что некоторые современные системы на основе Ubuntu по умолчанию даже не используют службу NTP. На моей машине Linux Mint 19 (Ubuntu 18.04) время сохраняется
systemd-timesyncd
.Поэтому, чтобы получить время после потери синхронизации, я просто запускаю
Начиная с 15.04 Ubuntu по умолчанию использует systemd. Поэтому критические системы, такие как время, управляются через systemd. Чтобы узнать, какой сервис использует ваша система, запустите что-то вроде
Для TechJS 16.04 сервис был
ntp
. Для себя на Ubuntu 18.04 (Mint 19) сервис естьsystemd-timesyncd
. Интересно, что я вошел на сервер 16.04, который у меня есть, и он также используетsystemd-timesyncd
.источник
Попробуйте использовать
-b
опцию, чтобы шагать время.источник
1 Jan 00:04:11 ntpdate[2226]: the NTP socket is in use, exiting
. Тем не менее, я думаю, что я попробовал это раньше,rc.local
но это не помогло.ntpdate -b <ipaddress>
Что ж,
Я использую Rasbian (Debian Wheezy) на моем Raspberry Pi, который не имеет hwclock. Мне показалось удобным написать небольшой скрипт и запустить его после того, как мой интернет-интерфейс заработал, так что я уверен, что как только сеть станет доступной, часы обновятся.
Сначала проверьте, что у вас есть
ntpdate
пакет, запустивВы должны добавить следующее в ваш
/etc/network/interfaces
(конечно,eth0
это только пример):И создайте следующий скрипт в
/usr/local/sbin/update-time.sh
(не забудьте сделать его исполняемымchmod
):источник
Алгоритмы ntpd отбрасывают смещения выборки, превышающие 128 мс, если только интервал, в течение которого [абсолютное значение] смещения выборки не меньше 128 мс, не превышает 900 с. Первый сэмпл после этого, независимо от смещения, переводит часы на указанное время. На практике это снижает частоту ложных срабатываний, когда часы ошибочно переключаются, до невероятно низкого уровня.
Обычно ntpd завершается, если смещение превышает допустимый предел, который по умолчанию составляет 1000 с. Это можно отключить с помощью опции -g:
-g Обычно ntpd завершается, если смещение превышает допустимый предел, который по умолчанию составляет 1000 с. Если предел работоспособности установлен равным нулю, проверка работоспособности не выполняется и любое смещение является приемлемым. Эта опция переопределяет ограничение и позволяет установить время на любое значение без ограничений; однако это может произойти только один раз. После этого ntpd выйдет, если предел будет превышен. Эта опция может использоваться с опцией -q.
оба из http://doc.ntp.org/4.1.0/ntpd.htm
Джонатан Натале
источник
Если вы можете позволить себе ждать сколько угодно времени, прежде чем ваша система синхронизируется, вы можете использовать
ntp-wait
команду:источник
Если вы используете systemd, вы можете использовать эту команду:
И тогда время обновляется в течение 10-15 секунд.
Проверено на Ubuntu Mate 16.04
источник
ntpd
иntpdate
запускается по умолчанию с использованием ограниченного порта (UDP 123). Если вы находитесь за брандмауэром,ntpd
никогда не будет работать, ноntpdate
может работать с-u
опцией. Например:ntpdate -u 0.ubuntu.pool.ntp.org
илиntpdate -u time.nist.gov
оба должны работать нормально.источник