Как настроить Ubuntu для синхронизации моих часов с сервером времени?

23

Я хотел бы, чтобы Ubuntu автоматически синхронизировал мои системные часы с сервером времени при запуске.

Однако мой компьютер не подключается к Интернету до тех пор, пока я не войду в систему (плюс 5 - 10 секунд, если хотите)

Как я могу настроить это сделать это?

Натан Осман
источник
2
Здесь уже есть отличные ответы, которые объясняют, как установить ntpd, чтобы ваш компьютер постоянно синхронизировался с интернет-серверами времени, но я просто хотел добавить, что по умолчанию Ubuntu будет синхронизировать время с ntp.ubuntu.com всякий раз, когда появляется ваш сетевой интерфейс «вверх» (например, при запуске компьютера). Похоже, что это не происходит в вашем случае из-за того, как вы подключаетесь к Интернету, но другие читатели не должны полагать, что Ubuntu не синхронизирует время без установки ntpd.
Вот тот, который объясняет, как установить его в time.nist.gov: askubuntu.com/questions/972799/…
SDsolar

Ответы:

32

Это сделано с NTP, для которого имеются инструкции . По сути, вам нужно установить демон NTP. Кажется, есть несколько вариантов, но «стандартный» есть в упаковке ntp. Согласно инструкциям на связанной странице,

sudo apt-get install ntp

получит все настройки для синхронизации с NTP-сервером Ubuntu.

РЕДАКТИРОВАТЬ : я пропустил "при запуске". Как правило, рекомендуется использовать ntpd для непрерывной синхронизации между вашей системой и сервером, но если вы действительно хотите синхронизироваться только один раз, ответ mfisch, похоже, будет именно тем, что вы ищете.

Дэвид З
источник
3
Я думаю, что в целом ему было бы лучше, если бы ntpd всегда работал и просто не мог подключиться, когда он не был в сети, что ни в коем случае не вредно. С учетом сказанного, мой метод также должен работать;)
mfisch
Я в порядке с этим работает постоянно.
Натан Осман
1
Джордж, просто сделай это. Я надеялся ответить на ваш «настоящий» вопрос, так как самая раздражающая вещь в мире - это задавать такой вопрос и отвечать на все вопросы: «Почему вы хотите это сделать?»
mfisch
Для Ubuntu 18.04 больше подходит совет по установке ntpd. По умолчанию systemd-timesyncd.service синхронизирует время.
Эрнсткл
9

Если вы перейдете в «Система-> Администрирование-> Время и дата», вы получите графический интерфейс для установки даты / времени.

Опция предоставляется для использования серверов времени. Если вы проверите его и NTP не установлен, он спросит, хотите ли вы установить его. Просто нажмите «да», и пусть он сделает свое дело :)

Маленькая Джава
источник
Забыл "стартап" вещь. NTP выполняет свою работу регулярно, что означает, что вы должны синхронизироваться всякий раз, когда вы находитесь в сети ... Но единственный способ убедиться в этом - использовать какой-то скрипт, предоставленный mfisch. Теперь, чтобы быть честным: после синхронизации маловероятно, что ваш компьютер испортится. Так что, если вы используете синхронизацию времени по умолчанию и позволяете ей делать это в фоновом режиме, вы должны быть хороши в большинстве случаев, не делая ничего больше.
Маленькая Джава
Разве это не помечено «Время и дата»?
Firefeather
@ Firefeather: вполне может быть. У меня нет английского интерфейса, поэтому я не могу сказать;)
Маленькая Джава
Ах, глупый я, забыв о интернационализации. Моя система en-us помечает это как «Время и дата».
Firefeather
6

Вы можете сделать это используя at и ntpdate . Возможно, он уже установлен, но ntpdate может и не быть. (apt-get установить ntpdate).

Сначала создайте небольшой скрипт, который запускает ntpdate, назовем его update_time.sh.

#!/bin/bash
ntpdate pool.ntp.org

В вашем файле .bash_login (который вам может понадобиться создать) добавьте:

at -f ~/update_time.sh now + 1 minute

Это должно делать то, что вы хотите. Вы можете изменить задержку на 5 минут, 10 минут и т. Д.

РЕДАКТИРОВАТЬ: Я только что понял, что вам нужно быть пользователем root для запуска ntpdate. Вам нужно будет установить бит SUID в скрипте update_time.sh, о котором я упоминал. Вы можете сделать это, запустив это из команды (нужно запустить только один раз):

sudo chmod 4711 update_time.sh
sudo chown root update_time.sh
mfisch
источник
1
iirc Вы не можете установить suid на сценарии .sh.
Broam
Можете ли вы сделать suid непосредственно на ntpdate? Это вероятно сделало бы то же самое.
mfisch
2
Зачем использовать at? И если вы собираетесь автоматически запускать ntpdate, почему бы просто не установить ntpслужбу?
Reinier Post
1
примечание: ntpdate больше не устанавливается по умолчанию в Ubuntu (16.04+) и устарел в пользу timedatectl. timedatectl управляет службой timedcd systemd, которая по умолчанию используется для синхронизации времени.
Кори Голдберг
0

Начиная с Ubuntu 16.04 timedatectl / timesyncd (которые являются частью systemd) заменяют большую часть ntpdate / ntp. См. Синхронизация времени .

Вам может потребоваться активировать синхронизацию времени, используя:

$ sudo timedatectl set-ntp on

Если вы хотите использовать Chrony:

  • Если вам требуется синхронизация по одному кадру: $ chronyd -q

  • Если вам требуется проверка времени одним выстрелом, без установки времени: $ chronyd -Q

  • Для непрерывной синхронизации рекомендуемое решение является хроническим:

Chrony (д)

Демон NTP chronyd вычисляет смещение и смещение системных часов и непрерывно их корректирует, поэтому нет больших исправлений, которые могли бы привести к несогласованным журналам, например. Стоимость - небольшая вычислительная мощность и память, но для современного сервера это обычно незначительно. Установка

Чтобы установить Chrony, в терминале введите:

$ sudo apt install chrony

Вам также может понадобиться активировать

sudo timedatectl set-ntp on

Обновление. Другой способ, если вышеприведенное не работает, - установить задание cron для запуска.$ chronyd -q

JBaczuk
источник