Как мне установить время и дату из интернета?

35

Как получить дату из Интернета и установить часы моего компьютера из командной строки?

Мохсен
источник
3
Я не понимаю, отрицательные голоса. Простые вопросы - это то, что делает сообщество сильным. Например, посмотрите это
Мохсен
3
Когда я наводю курсор мыши над стрелкой вниз вопроса, я вижу: «Этот вопрос не требует каких-либо исследований; он неясен или бесполезен». Я хотел бы понизить ваш вопрос на основе первого (без указания того, что вы нашли), второго (без указания на какой конкретной платформе вы работаете, и почему это должно быть командной строкой (вместо обычного демона времени) ) и третий (большинство пользователей * nix по умолчанию имеют установленный демон времени).
Anthon
+1 Я тоже не понимаю отрицательных голосов просто потому, что это то, что беспокоило меня много раз прежде, и кажется невозможным найти что-то краткое и полезное в этой конкретной теме.
10
@Mohsen Я не понизил голос, но отличие от вопроса, который вы связали, состоит в том, что switchв ruby ​​нет, хотя вы можете напрямую установить дату через date -s(как показано на странице руководства) или использовать любую из команд, описанных ниже ...
Ульрих Дангел
1
@Anthon Я не согласен: этот вопрос касается небольшого устройства с BusyBox, что делает общий совет «использовать NTP» необязательно применимым
Жиль «ТАК - Хватит быть злым»

Ответы:

29

Вы можете использовать :

sudo dpkg-reconfigure tzdata

для настройки вашего часового пояса.

Для обновления времени и даты из Интернета используйте следующее:

устанавливать

Если ntpd не установлен, используйте любую из следующих команд для установки ntpd:

  • Для RPM на основе:

    yum install ntp 
    
  • Для Debian:

    sudo apt-get install ntp
    

конфигурация

Вы должны как минимум установить следующий параметр в файле конфигурации /etc/ntp.conf: сервер

Например, откройте файл /etc/ntp.conf с помощью текстового редактора vi:

  # vi /etc/ntp.conf

Найдите параметр сервера и установите его следующим образом:

  server pool.ntp.org

Сохраните файл и перезапустите службу ntpd:

  # /etc/init.d/ntpd start

Вы можете немедленно синхронизировать системные часы с NTP-сервером с помощью следующей команды:

  # ntpdate pool.ntp.org

* Для установки времени и даты вручную используйте следующий синтаксис:

 date --set="STRING"

Например, установите новые данные на 2 октября 2006 г. 18:00:00, введите в качестве пользователя root следующую команду:

# date -s "2 OCT 2006 18:00:00"

ИЛИ

# date --set="2 OCT 2006 18:00:00"

Вы также можете упростить форматирование, используя следующий синтаксис:

# date +%Y%m%d -s "20081128"

Для установки времени используйте следующий синтаксис:

# date +%T -s "10:13:13"

Где,

10: час (чч) 13: минута (мм) 13: секунда (сс)

Используйте% p, эквивалентный локали AM или PM, введите:

# date +%T%p -s "6:10:30AM"

# date +%T%p -s "12:10:30PM"
tusharmakkar08
источник
Хотя информация о дате, по-видимому, полностью действительна, она нигде не учитывает требования from the internetиз заголовка ФП.
Anthon
Я считаю, что пакет tzdata (данные о часовых поясах) синхронизирует данные только из Интернета. Поправь меня, если я ошибаюсь.
tusharmakkar08
3
Тздата - это информация о часовых поясах и летнем времени (начало, конец, эпоха), а не фактическая дата и время. Конечно, это удобно, чтобы узнать, как добраться до вашего местного времени, основываясь на знании вашего часового пояса и времени UTC, но вам все равно нужно получить последний из Интернета.
Anthon
Вы неправы. Данные о часовом поясе должны быть обновлены (поскольку изменения происходят постоянно), НО они не обновляются автоматически из Интернета. ИЛИ не устанавливает время из Интернета.
Ульрих Дангел
@Anthon: я отредактировал свой ответ соответственно. Спасибо.
tusharmakkar08
23

Небольшой код, который я нашел, чтобы обновить ваше время, если вы не хотите устанавливать что-либо только для обновления даты. :)

sudo date -s "$(wget -qSO- --max-redirect=0 google.com 2>&1 | grep Date: | cut -d' ' -f5-8)Z"
Прашант Кабаде
источник
1
Я использую, google.inчтобы узнать текущее время для моего часового пояса (ИНДИЯ).
Dilawar
Обратите внимание на трейлинг, Zкоторый указывает, что время указывается в часовом поясе Зулу, поэтому не требуется никаких специальных манипуляций с часовым поясом, если часовой пояс компьютера установлен правильно.
user202729
10

Я использую это:

sudo ntpd -qg; sudo hwclock -w

сначала скажите ntpd просто установить время и после этого остановиться с помощью -q. Кроме того, в случае, если ваши часы имеют большую ошибку, мы должны сказать ntpd, чтобы в этом случае также настраивался с -g. Наконец, запишите часы на аппаратное обеспечение, чтобы сохранить изменения при перезагрузке с помощью hwclock -w (-w для установки hardwareclock на текущее системное время, есть разница).

Silverrocker
источник
1
Я склонен делать это с «&&» вместо точки с запятой, чтобы в случае сбоя первой команды (например, из-за нарушения сетевого соединения) вторая команда была закорочена
Theophrastus
7

Используйте ntpdate, ntpd или Chrony для подключения к NTP-серверу.

Игнасио Васкес-Абрамс
источник
5

Некоторые дистрибутивы поставляются rdate для этой цели. Основное использование:

# just query
bash-4.2$ rdate pool.ntp.org
rdate: [pool.ntp.org]   Wed Jun 12 11:05:40 2013

# set system time
bash-4.2$ rdate -s pool.ntp.org
manatwork
источник
Путь лучше и проще, чем у ntp
andrewtweber
pool.ntp.orgсейчас отказывается от подключений от rdate. time.nist.govработает. Также, после того как вы установили системное время, вы должны также установить аппаратные часы, запустив их hwclock -wдля установки системного времени. Затем вы можете убедиться, что это правильно, запустивhwclock -r
MatthewLee
5

После некоторого исследования я закончил с этим. Я также применил это к моему собственному серверу:

sudo apt-get install ntp
sudo dpkg-reconfigure ntp
ntpq -p

Если последняя команда показывает действительный список серверов, вы можете идти. Команда запустит довольно сложный набор алгоритмов, которые, помимо прочего, итерируют ваш сдвиг часов и компенсируют их. У вас получатся довольно точные часы, даже если вы потеряете соединение с NTP-серверами. Однако команде требуется несколько минут, чтобы начать работу.

Источник: здесь и здесь .

Tubbles
источник
0

Чтобы найти "пиров" (хосты, которые вы можете запросить) вы можете использовать ntpq -p.

Если у вас уже запущена служба NTP, вы должны остановить ее перед обновлением вручную, например, с помощью sudo service ntp stop.

Теперь вы можете сделать запрос к пиру, например, используя sudo ntpdate "peer".

l0b0
источник
0

Использование инструмента rdate , как предложено в ответе manatwork , но с протоколом SNTP -nи -4опциями IPv4 :

# just print synced time, not set
rdate -n -4 -p time-a.nist.gov

# print and set synced time
sudo rdate -n -4 time-a.nist.gov

Инструмент может быть установлен на Debian следующим образом:

sudo apt-get install rdate
Сержант
источник
0

В дополнение к ответу Тушара , я также должен был сделать apt-get install ntpdateна своем Ubuntu 14.04.

Публикация в качестве ответа, потому что репутации недостаточно для комментирования.

pylipp
источник
0

Я также искал не ntp / ntpd способ периодической перезагрузки часов. Мне понравился парсинг заголовка google.com, но я обнаружил, что он не работает в Ubuntu. Я думаю, что это также будет работать на Raspberry Pi.

sudo date +"%d %b %Y %T %Z" -s "$(wget -qSO- --max-redirect=0 http://google.com 2>&1 | grep '^  Date:' | cut -d' ' -f 5-)"

Также альтернатива, использующая curl вместо wget.

sudo date +"%d %b %Y %T %Z" -s "$(curl -s --head http://google.com | grep '^Date:' | cut -d' ' -f 3-)"

Протестировано на PI с сотовой сетью и результаты аналогичны:

Using host & wget -- RCV: 1324 bytes SND: 581 bytes
Using host & curl -- RCV: 1318 bytes SND: 567 bytes

Примечание. Я использую host, чтобы разрешить google.com IP-адрес, чтобы я мог открыть только этот IP-адрес во время выполнения этой команды с помощью iptables.

Рон Б
источник