Синхронизация времени Linux из командной строки

Обновлено: 02.07.2024

NTP — это протокол TCP/IP для синхронизации времени по сети. По сути, клиент запрашивает текущее время с сервера и использует его для установки собственных часов.

За этим простым описанием скрывается много сложностей: существуют уровни NTP-серверов, где NTP-серверы первого уровня подключены к атомным часам, а серверы второго и третьего уровней распределяют нагрузку по фактической обработке запросов по Интернету. Кроме того, клиентское программное обеспечение намного сложнее, чем вы думаете, — оно должно учитывать задержки связи и корректировать время таким образом, чтобы не нарушать работу всех других процессов, выполняемых на сервере. Но, к счастью, вся эта сложность скрыта от вас!

Ubuntu по умолчанию использует timedatectl / timesyncd для синхронизации времени, и пользователи могут дополнительно использовать chrony для обслуживания сетевого протокола времени.

Синхронизация системного времени

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

timesyncd доступен по умолчанию и заменяет не только ntpdate, но и клиентскую часть chrony (ранее ntpd). Таким образом, в дополнение к одноразовому действию, которое ntpdate обеспечивает при загрузке и сетевой активации, теперь timesyncd по умолчанию регулярно проверяет и синхронизирует ваше локальное время. Он также сохраняет обновления времени локально, так что после перезагрузки монотонно увеличивается, если применимо.

Если chrony установлен, timedatectl делает шаг назад, позволяя chrony вести учет времени. Это должно гарантировать, что никакие две службы синхронизации времени не будут конфликтовать. Хотя это больше не рекомендуется использовать, это также относится к устанавливаемому ntpd, чтобы сохранить любое старое поведение/конфигурацию, которое у вас было при обновлении. Но это также означает, что при обновлении предыдущей версии ntp/ntpdate все еще может быть установлен, и поэтому новые службы на основе systemd отключаются.

ntpdate считается устаревшим в пользу timedatectl (или chrony) и поэтому больше не устанавливается по умолчанию. timesyncd, как правило, правильно синхронизирует ваше время, а chrony поможет в более сложных случаях. Но если у вас есть один из нескольких известных особых случаев использования ntpdate, рассмотрите следующее:

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

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

Настройка timedatectl и timesyncd

Текущий статус времени и настройки времени через timedatectl и timesyncd можно проверить с помощью timedatectl status .

Если хрони запущен, он автоматически переключится на:

Через timedatectl администратор может управлять часовым поясом, тем, как системные часы должны быть связаны с hwclock, и должна ли быть включена постоянная синхронизация или нет. Дополнительные сведения см. в man timedatectl.

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

Сервер имен для получения времени для timedatectl и timesyncd можно указать в /etc/systemd/timesyncd.conf, а дополнительные файлы конфигурации можно сохранить в /etc/systemd/timesyncd.conf.d/ . Записи для NTP= и FallbackNTP= представляют собой списки, разделенные пробелами. Дополнительную информацию см. в man timesyncd.conf.

Обслуживать сетевой протокол времени

Если в дополнение к синхронизации вашей системы вы также хотите обслуживать информацию NTP, вам нужен сервер NTP. Есть несколько вариантов с chrony, ntpd и open-ntp. Рекомендуемое решение — хрони.

хрония(г)

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

Установка

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

Это предоставит два двоичных файла:

chronyd — фактический демон для синхронизации и обслуживания по протоколу NTP

chronyc — интерфейс командной строки для демона chrony

Конфигурация Chronyd

Отредактируйте файл /etc/chrony/chrony.conf, чтобы добавить/удалить строки сервера. По умолчанию настроены эти серверы:

Дополнительную информацию о параметрах конфигурации см. в man chrony.conf. После изменения любого файла конфигурации вам необходимо перезапустить хрони:

Обслуживание протокола NTP

Вы можете установить хрони (вверху) и настроить специальное оборудование (внизу) для локальной синхронизации
и как установлено по умолчанию, чтобы оставаться на безопасной и консервативной стороне. Но если вы хотите обслуживать NTP, вам нужно изменить конфигурацию.

Чтобы включить обслуживание протокола NTP, вам нужно как минимум установить разрешающее правило, которое определяет, каким клиентам/сетям вы хотите, чтобы chrony обслуживал NTP.

Примером может быть

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

Просмотреть статус

Используйте chronyc, чтобы просмотреть статус демона chrony. Например, чтобы получить обзор доступных и выбранных источников времени.

Некоторые команды chronyc являются привилегированными и не могут выполняться по сети без явного разрешения. Дополнительные сведения см. в разделе Доступ к командам и мониторингу в man chrony.conf. Локальный администратор может использовать sudo как обычно, так как это предоставит ему доступ к сокету локального администратора /var/run/chrony/chronyd.sock .

Поддержка PPS

Chrony изначально поддерживает различные типы PPS. Он может использовать PPS API ядра, а также аппаратные часы PTP. Большинство общих приемников GPS можно использовать через GPSD. Доступ к последнему (и потенциально большему количеству) можно получить через SHM или через сокет (рекомендуется). Все вышеперечисленное можно использовать для дополнения хронии дополнительными высококачественными источниками времени для повышения точности, джиттера, дрейфа, долгосрочной или краткосрочной точности (обычно каждый тип часов хорош в одном из них, но неидеален в другие). Дополнительные сведения о настройке см. на некоторых внешних ресурсах PPS/GPSD, перечисленных ниже.

Примечание: в выпуске 20.04 была ошибка, из-за которой, пока она не будет исправлена, вы можете захотеть добавить этот контент в ваш /etc/apparmor.d/local/usr.sbin.gpsd .

Пример конфигурации GPSD для передачи Chrony

Для установки вам потребуется
$ sudo apt install gpsd chrony

Но вы захотите протестировать/отладить свои настройки и особенно прием GPS, поэтому также установите
$ sudo apt install pps-tools gpsd-clients

Устройства GPS обычно обмениваются данными через последовательные интерфейсы, однако в наши дни наиболее распространенным типом являются устройства USB GPS, которые имеют последовательный преобразователь после USB. Если вы хотите использовать это для PPS, имейте в виду, что большинство устройств не передает сигнал PPS через USB. Подробности смотрите в списке оборудования GPSD. Приведенные ниже примеры были выполнены с помощью Navisys GR701-W.

При подключении такого устройства (или во время загрузки) dmesg должен сообщать о каком-то последовательном соединении, например:

Выше мы видим, что он появился как ttyUSB0 . Чтобы позже chrony принимал информацию о времени, мы должны настроить ее в /etc/chrony/chrony.conf (пожалуйста, замените USB0 на то, что применимо к вашей настройке):

Затем перезапустите chrony, чтобы сделать сокет доступным и ожидающим.
sudo systemctl перезапустить хронию

Далее нужно указать gpsd, какое устройство управлять, поэтому в /etc/default/gpsd прописываем:
DEVICES="/dev/ttyUSB0"

Кроме того, gpsd используется по умолчанию для отслеживания местоположения по GPS. Поэтому обычно он не потребляет никакого процессора, так как не запускает службу, а ожидает сокет для клиентов. Кроме того, клиент затем сообщает gpsd, что он запрашивает, и gpsd будет делать только это.
Для случая использования gpsd в качестве PPS-обеспечивающего-демона вы хотите установить параметр:

  • немедленный запуск даже без подключения клиента, это можно установить в GPSD_OPTIONS файла /etc/default/gpsd:
    • GPSD_OPTIONS="-n"
    • sudo systemctl enable /lib/systemd/system/gpsd.service

    Перезапуск gpsd теперь инициализирует PPS из GPS, и в dmesg вы увидите

    Если у вас есть несколько PPS, инструмент ppsfind может быть полезен для определения того, какой PPS принадлежит какому GPS. Вы можете проверить это с помощью:

    Чтобы получить больше, вам нужен GPS, чтобы получить замок.
    Такие инструменты, как cgps или gpsmon, должны сообщать об исправлении 3D-изображения, если данные в порядке.
    Тогда вам нужно проверить, действительно ли данные PPS сообщаются об этом с помощью ppstest

    Далее может потребоваться убедиться, что устройство pps действительно отправляет данные PPS, для этого запустите ppstest :

    Хорошо, gpsd теперь работает, прием GPS нашел исправление, и это передано в chrony .
    Теперь давайте проверим это с точки зрения хронии.

    Изначально (например, до запуска gpsd или до его блокировки) это будут новые и «ненадежные» источники, отмеченные знаком «?». Если ваши устройства остаются в «?» состояние и не покинет его даже через некоторое время, тогда gpsd, похоже, не передает никаких данных в хрони, и вам нужно отладить, почему.

    Со временем хрони классифицирует их как хорошие или плохие.
    В данном примере необработанный GPS имел слишком большое отклонение, но PPS был в порядке.

    И, наконец, через некоторое время он использовал аппаратный ввод PPS, так как он был лучше:

    С PPS также можно работать, но использовать его в сочетании, например, с выбранный сервер.
    Подробнее о том, как будут выглядеть все эти комбинации, см. в man chronyc.

    И если вам интересно, насколько хороши ваши данные GPS на основе shm, вы также можете проверить это.
    Во-первых, хрони не только скажет вам, классифицировала ли она ее как хорошую или плохую. С помощью sourcestats вы также можете проверить детали

    Вы также можете отслеживать необработанные данные, которые gpsd или другие рефклокы, совместимые с ntpd, отправляют через общую память, используя ntpshmmon:

    Поддержка НТС

    В Chrony 4.0 (впервые появился в Ubuntu 21.04 Hirsute) добавлена ​​поддержка Network Time Security «NTS».

    NTS-сервер

    Чтобы настроить сервер с NTS, вам потребуются сертификаты, чтобы сервер мог аутентифицировать себя и на основе этого разрешить шифрование и проверку трафика NTP.

    В дополнение к оператору разрешения, необходимому любому хрону, работающему в качестве NTP-сервера, есть две обязательные записи конфигурации, которые потребуются. Те для сертификатов как

    Примеры записей будут выглядеть так:

    Важно отметить, что по причинам изоляции chrony по умолчанию запускается как пользователь и группа _chrony . Поэтому вам необходимо предоставить доступ к сертификатам для этого пользователя.

    $ sudo chown _chrony:_chrony /etc/chrony/*.pem

    Затем перезапустите chrony systemctl перезапустите chrony, и он будет готов предоставить службу времени на основе NTS.

    Работающий хронический сервер имеет различную статистику, в том числе учитывается количество установленных (или разорванных) соединений NTS:

    Есть также статистика для каждого клиента, которую можно включить с помощью параметра -p команды client.

    Для более сложных сценариев есть дополнительные параметры настройки NTS, описанные на странице руководства.

    Клиент NTS

    Клиенту необходимо указать сервер как обычно (директивы пула не работают с NTS). Как обычно, после адреса сервера могут быть указаны параметры, и нужно добавить nts.

    сервер iburst nts

    Можно проверить данные аутентификации соединений, установленных клиентом, например

    Опять же, на справочной странице описаны дополнительные параметры. Распространенные варианты использования — указание явного доверенного сертификата.

    Плохие часы и безопасная синхронизация времени — проблема «курицы и яйца».

    Есть одна проблема с системами, которые имеют очень плохие часы. NTS основан на TLS, и для этого нужны несколько правильные часы. Из-за этого синхронизация на основе NTS может завершиться ошибкой. На оборудовании, затронутом этим, можно рассмотреть возможность использования параметра nocerttimecheck, который позволяет установить количество раз, когда время может быть синхронизировано без проверки проверки и истечения срока действия.

    Протокол сетевого времени (NTP) — это протокол, используемый для автоматической синхронизации системных часов компьютера по сети. Системные часы компьютера могут использовать всемирное координированное время (UTC), а не местное время.

    Поддержание точного времени в системах Linux, особенно на серверах, является важной задачей по многим причинам. Например, в сетевой среде точное отслеживание времени требуется для точных временных меток в пакетах и ​​системных журналах для анализа первопричин, определения возникновения проблем и выявления корреляций.

    Chrony теперь является пакетом реализации NTP по умолчанию в последних версиях операционных систем Linux, таких как CentOS, RHEL, Fedora и Ubuntu/Debian, и поставляется предварительно установленным по умолчанию. Пакет состоит из chronyd, демона, работающего в пользовательском пространстве, и chronyc, программы командной строки для мониторинга и управления chronyd.

    Chrony — это универсальная реализация NTP, которая хорошо работает в широком диапазоне условий (см. сравнение набора chrony с другими реализациями NTP). Его можно использовать для синхронизации системных часов с NTP-серверами (действовать в качестве клиента), с эталонными часами (например, с GPS-приемником) или с ручным вводом времени. Его также можно использовать в качестве сервера NTPv4 (RFC 5905) или однорангового узла для предоставления службы времени другим компьютерам в сети.

    В этой статье вы узнаете, как синхронизировать время сервера с NTP в Linux с помощью chrony.

    Установка Chrony на сервер Linux

    В большинстве систем Linux команда chrony не установлена ​​по умолчанию. Чтобы установить его, выполните приведенную ниже команду.

    После завершения установки запустите службу chrony и включите ее автоматический запуск при загрузке системы, а затем проверьте, работает ли она.

    Проверить статус Chrony

    Чтобы проверить, правильно ли работает chrony, а также узнать количество подключенных к нему серверов и одноранговых узлов, выполните следующую команду chronyc.

    Проверить Chrony Активность

    Проверка синхронизации Chrony

    Чтобы отобразить информацию (список доступных серверов, состояние и смещения от локальных часов и источника) о текущих источниках времени, к которым обращается chronyd, выполните следующую команду с флагом -v, отображающим описание для каждого столбца.

    Проверить Chronyd Источники времени

    Что касается предыдущей команды, чтобы отобразить другую полезную информацию для каждого из источников, которые в настоящее время исследуются chronyd (например, скорость дрейфа и процесс оценки смещения), используйте команду sourcestats.

    Проверить Chronyd Исходная статистика

    Чтобы проверить отслеживание хронологии, выполните следующую команду.

    В выходных данных этой команды идентификатор ссылки указывает имя (или IP-адрес), если доступно, сервера, с которым в данный момент синхронизируется компьютер, из всех доступных серверов.

    Отображать отслеживание хронии

    Настройка источников времени Chrony

    Основной файл конфигурации хрони находится в /etc/chrony.conf (CentOS/RHEL/Fedora) или /etc/chrony/chrony.conf (Ubuntu/Debian).

    При установке ОС Linux в облаке в вашей системе должны быть серверы по умолчанию или пул серверов, добавленный в процессе установки. Чтобы добавить или изменить серверы по умолчанию, откройте файл конфигурации для редактирования:

    Вы можете добавить несколько серверов с помощью директивы server, как показано ниже.

    Добавить серверы NTP

    Добавить пул серверов NTP

    В файле можно настроить множество других параметров. После внесения изменений перезапустите службу хрони.

    Чтобы отобразить информацию о текущих источниках времени, запрашиваемых chronyd, еще раз выполните следующую команду.

     Просмотр источников времени Chronyd

    Чтобы проверить статус отслеживания хронологии, выполните следующую команду.

     Проверить статус синхронизации Chrony

    Чтобы отобразить текущее время в вашей системе, проверьте, синхронизированы ли системные часы и активен ли NTP, выполните команду timedatectl:

     Проверить текущее время сервера

    На этом руководство подошло к концу. Если у вас есть какие-либо вопросы, свяжитесь с нами через раздел комментариев ниже. Для получения дополнительной информации ознакомьтесь с: использование пакета chrony для настройки NTP из документации RHEL 8 или использование chrony для настройки NTP из официального блога Ubuntu.

    Если вам понравилась эта статья, подпишитесь на уведомления по электронной почте о руководствах по Linux. Если у вас есть вопросы или сомнения? обратитесь за помощью в разделе комментариев.

    Если вы цените то, что мы делаем здесь, в TecMint, вам следует подумать о следующем:

    TecMint – это самый быстрорастущий и пользующийся наибольшим доверием сайт сообщества, где можно найти любые статьи, руководства и книги по Linux в Интернете. Миллионы людей посещают TecMint! для поиска или просмотра тысяч опубликованных статей, доступных всем БЕСПЛАТНО.

    Если вам нравится то, что вы читаете, купите нам кофе (или 2) в знак признательности.

    Поддержите нас

    Мы благодарны за вашу бесконечную поддержку.

    Похожие сообщения

    Отключить SSH Корневой вход

    Установить контейнер LXC Linux в CentOS

    Установить пароль GRUB

    Настройка репликации MySQL в Linux

    Установить сервер Samba в RHEL

    Yum Отключить пакеты для установки

    6 мыслей о «Как синхронизировать время с NTP в Linux»

    У меня есть компьютер W10/Ubuntu с двойной загрузкой. Когда я загружаюсь в Ubuntu с W10, отображаемое время верно до появления домашней страницы Ubuntu, а затем уменьшается на 4 часа, когда отображается домашняя страница Ubuntu.

    При загрузке до W10 время остается ошибочным на 4 часа.

    Как получить правильное время без необходимости синхронизации после каждой загрузки?

    Используйте ntpdate на машине, на которой вы не хотите запускать NTP-сервер. Простая задача Cron может автоматизировать синхронизацию времени с вышестоящим NTP-сервером.


    Лоуэлл Хеддингс


    Лоуэлл Хеддингс
    Основатель и генеральный директор

    Лоуэлл — основатель и генеральный директор How-To Geek. Он руководит шоу с момента создания сайта в 2006 году. За последнее десятилетие Лоуэлл лично написал более 1000 статей, которые просмотрели более 250 миллионов человек. До создания How-To Geek Лоуэлл 15 лет проработал в сфере ИТ, занимаясь консалтингом, кибербезопасностью, управлением базами данных и программированием. Подробнее.


    Большинство серверов, вероятно, автоматически настраиваются на сетевое время, но если вы хотите настроить его для себя или изменить серверы, с которыми вы синхронизируетесь, вот небольшая статья, в которой показано, как это сделать.

    Поскольку мне нужно было сделать это сегодня утром, я решил, что имеет смысл записать это в следующий раз, когда мне нужно будет это сделать. Да, эта статья действительно для меня.

    Во-первых, вам необходимо установить NTP, если он еще не установлен. Для Debian или Ubuntu это будет следующая команда:

    Для Redhat или CentOS вам потребуется использовать эти команды для установки и включения ntp:

    yum install ntp

    systemctl enable ntpd

    Тогда вам нужно отредактировать файл /etc/ntp.conf, который, вполне возможно, уже заполнен для вас.

    Затем вам потребуется перезапустить или запустить службу NTPD:

    • › Как установить Google Play Маркет в Windows 11
    • › Что означает XD и как вы его используете?
    • ›5 шрифтов, которые следует прекратить использовать (и лучшие альтернативы)
    • › Как восстановить метки панели задач в Windows 11
    • › Почему прозрачные чехлы для телефонов желтеют?
    • › Почему не было Windows 9?

    Рекомендуется синхронизировать часы с Интернетом в соответствии с указанным часовым поясом, если нет необходимости изменять системное время вручную. В этой статье описываются способы с помощью командной строки и графического пользовательского интерфейса Debian 10 для синхронизации ваших часов с серверами времени в Интернете. Эта функция изначально была разработана для старых компьютеров, которые не успевали за текущим временем.

    Мы выполнили команды и процедуры, упомянутые в этой статье, в системе Debian 10 Buster.

    Синхронизация системных часов через командную строку

    Проверка статуса текущего времени

    Команда timedatectl позволяет проверить текущее состояние системных часов. Откройте терминал Debian с помощью поиска средства запуска приложений следующим образом:

    Debian Terminal

    Затем выполните следующую команду:

    Проверьте системное время с помощью timedatectl

    Среди прочего вы можете увидеть местное время, универсальное время, а также синхронизировать ваши системные часы с серверами времени в Интернете или нет.

    Синхронизировать системное время

    Команда chronyd позволяет вам проверить время, когда ваши системные часы выключены. Если вы запустите команду chronyd без предварительной установки утилиты, вы получите следующее сообщение:

    Chronyd не установлен

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

    Установить Chrony

    Если ваше время уже не синхронизировалось, как мое, вы бы заметили, что утилита синхронизирует время сразу после установки.

    Проверить время после установки хрони

    • Затем вы можете использовать следующую команду, чтобы увидеть, насколько ваше время отличается от интернет-сервера. Строка «Системные часы неверны» в выводе указывает на это.

    В следующем примере вы можете видеть, что когда я впервые запустил команду chronyd -q, моя система была выключена на 103,43 секунды. После запуска команды мое интернет-время было сброшено, и это можно было наблюдать, когда я повторно запустил команду. На этот раз мои системные часы отстают всего на 0,001331 секунды, что является незначительной разницей.

    Посмотрите, насколько неверно системное время

    Синхронизация системных часов через графический интерфейс

    В настоящее время операционные системы настроены на автоматическое получение даты и времени и часовых поясов через Интернет. Вы можете настроить свою систему на получение даты и времени в соответствии с выбранным часовым поясом следующим образом:

    Нажмите стрелку вниз, расположенную в правом верхнем углу рабочего стола Debian, а затем щелкните значок настроек, расположенный в левом нижнем углу:

    Меню настроек на рабочем столе

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

    Значок настроек

    Перейдите на вкладку "Подробности" и выберите параметр "Дата и время". Нажмите кнопку «Разблокировать» в представлении «Дата и время» и укажите пароль для sudo/авторизованного пользователя в диалоговом окне «Аутентификация».

    Аутентифицироваться как администратор

    Затем убедитесь, что кнопка "Автоматическая дата и время" включена. Это позволит вам автоматически получать текущую дату и время с интернет-сервера.

    Настройки даты и времени

    Важно: в Debian вы сможете включить/выключить автоматическую настройку даты и времени, только если сначала будет удалена утилита Chrony. Вы можете сделать это, выполнив следующую команду в Терминале:

    Выполняя шаги, описанные в этом руководстве, вы можете быть на 100 % уверены, что текущее время в вашей системе синхронизировано со временем на вашем сервере времени в Интернете.

    Похожие сообщения:

    Карим Буздар

    Об авторе: Карим Буздар имеет степень инженера в области телекоммуникаций и несколько сертификатов системного администратора. Как ИТ-инженер и технический автор, он пишет для различных веб-сайтов. Вы можете связаться с Каримом в LinkedIn

    Поиск

    Об этом сайте

    Последние руководства


    сообщить об этом объявлении

    Читайте также: