Centos 7 синхронизация времени

Обновлено: 02.07.2024

Приветствую! Сегодня разберем довольно простую но полезную вещь - настройку ntp на операционной системе CentOS 7 (6).

Приветствую! Сегодня разберем довольно простую но полезную вещь - настройку ntp на операционной системе CentOS 7 (6).

Для чего это делать? Это делается для того, чтобы на вашем сервере было точное время. А если у вас в сети есть несколько серверов - то это просто необходимая вещь. У меня, к примеру, есть несколько zabbix proxy и 1 zabbix server и чтобы данные не разнились, то необходимо, чтобы на все этих серверах было одинаковое время. Время можно синхронизировать в интернете или со своим сервером времени (как это сделано у меня). Про настройку своего сервера времени мы поговорим отдельно. Сейчас разберемся, как настроить свои сервера на синхронизацию времени.

Настройка NTP на CentOS 7

Для начала устанавливаем NTP:

Устанавливаем часовой пояс (временную зону), которая соответсвует вашей. Например у меня это Москва, создаем символическую ссылку:

Далее необходимо указать сервера, с которыми мы будем синхронизировать время. По умолчанию 3 сервера уже есть, можно оставить их, можно добавить свои. Мы добавим свой:
Открываем файл ntp.conf для редактирования:

Находим в нем строчки:
Перед ними пишем наш ntp сервер:

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

Теперь давайте вручную синхронизируем время с нашим сервером:

Получаем ответ типа: 15 Sep 10:03:56 ntpdate[4843]: step time server 192.168.0.68 offset -0.012084 sec - значит синхронизация прошла успешно и время было поправлено на данный период.

Если вы получите ошибку вида: the NTP socket is in use, exiting, значит у вас чем то уже используется порт 123. Попробуйте остановить ntpd следующей командой:
и еще раз запустите синхронизацию:

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

Проверить работу ntp можно командой ntpq -p

На этом все, мы настроили автоматическую синхронизацию времени на CentOS7. Эта статья может быть актуальна практически для любого дистрибутива Unix, не только CentOS 7. Если у Вас остались вопросы - задавайте их в комментариях.

date

10.12.2019

directory

CentOS, Linux

comments

Комментариев пока нет

На серверах существует два вида часов. Аппаратные (real time clock), которые работают даже при выключенном сервере и программные часы операционной системы. Показания этих двух часов, могут отличаться. При этом, после запуска операционной системы, программные часы опираются на показания аппаратных и в дальнейшем могут корректироваться системой.

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

Hwclock: настройка аппаратного (системного) времени

Чтобы проверить аппаратное время в Linux используется утилита hwclock:

  • hwclock --localtime — проверка аппаратного времени без поправки
  • hwclock --utc – проверка времени с условием, что аппаратные часы идут по времени UTC

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

Чтобы установить конкретное время, выполните:

hwclock в linux centos

Ручная настройка времени в CentOS

В Linux за программное время отвечает утилита date или timedatectl. Если вызывать утилиту date без параметров, она покажет текущее время на сервере:

Если вы хотите выставить время вручную, можно воспользоваться утилитой date с дополнительными ключами:

Где MM – месяц, DD — день, hh – час, mm – минуты.

date - изменить дату/время в centos

Для получения расширенной информации о дате, времени, поясе, синхронизации, настройках перехода на сезонное (летнее/зимнее) время (DST), используется утилита timedatectl. Она дает более подробную информацию о настройках времени на сервере.

timedatectl -текщие настройки времени

Timedatectl также позволяет изменить время:

timedatectl set-time

Настройка часового пояса в CentOS

Чтобы время на сервере CentOS Linux соответствовало вашему часовому поясу, его можно изменить вручную. Для этого есть две утилиты:

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

timedatectl set-timezone изменить часовой пояс в linux centos

Или же можно использовать tzdata. Чтобы воспользоваться данным методом, нужно заменить файл /etc/localtime на нужный вам. Весь список часовых поясов, расположен в директории /usr/share/zoneinfo/. Заменим часовой пояс на Asia/Almaty. Делаем бэкап файла locatime:

Создаем симлинк на нужный часовой пояс:

/etc/localtime - пааметры часового пояса

Настройка синхронизация времени по NTP в CentOS

Вы можете настроить автоматическую синхронизацию времени на вашем сервере с внешним NTP (Network Time Protocol) сервером. Для этого нужно установить сервис ntp. Например, в CentOS 7 установка выполняется через yum:

После установки, нужно запустить сервис ntpd и добавить его в автозагрузку:

Проверим, что сервис запущен:

В файле /etc/ntp.conf нужно указать сервера, с которыми нужно синхронизировать время:

Синхронизация времени выполняется последовательно. Если недоступен первый NTP сервер, идет обращение ко второму и т.д.

Можно вручную синхронизировать время с указанным NTP сервером командой:

По умолчанию, ntpd включает в системе режим “11 minute mode”, то есть время будет синхронизироваться каждые 11 минут. Если вы не можете использовать демон ntpd, вы можете настроить синхронизацию времени по крону, добавьте в крон следующую команду:

Используем chronyd для синхронизация времени в CentOS 8

Для CentOS 8 из официальных репозиториев убрали ntp и ntpdate, поэтому для синхронизации времени нужно использовать chrony.

Основные преимущества chrony:

  • высокая скорость и точность синхронизции
  • корректная работа при отсутствии доступа к эталонным часам (ntpd требуются регулярные запросы)
  • по-умолчанию не меняет сразу время при синхронизации, чтобы не нарушить работу программ
  • Меньше использует ресурсов

По умолчанию, утилита chrony уже установлена в системе, но если по какой-то причина у вас ее нет, выполните установку:

Как и любой другой сервис, после установки chrony нужно включить и добавить в автозагрузку:

Проверим статус сервиса:

systemctl start chronyd в centos

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

timedatectl status NTP Service: active

chronyc tracking

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

chronyc sources

Если вы хотите установить конкретное время и дату вручную, вы можете воспользоваться утилитой date, но перед этим нужно отключить демон chronyd.

Распространённые ошибки при настройке времени в CentOS

В данном разделе, я опишу частые ошибки, которые возникают при работе с утилитами timedatectl, ntp.

При ручной синхронизации времени, у вас может возникнуть подобная ошибка:

ntpdate [26214]: the NTP socket is in use, exiting

Она означает, что у вас запущен демон ntpd, который блокирует ручную синхронизация времени. Чтобы выполнить ручную синхронизацию, остановите демон ntpd:

И запустите синхронизацию заново:

service ntpd stop

Аналогичная ошибка может возникать и при работе с утилитой timedatectl:

timedatectl Failed to set time: Automatic time synchronization is enabled

Теперь нужно отключить автоматическую синхронизацию в самой утилите timedatectl:

И выполнить команду по установке конкретного времени:

timedatectl set-ntp

При работе с часовыми поясами, они могут быть не установлены у вас на сервере и создать симлинк для localtime не получится. Для того, чтобы в системе были доступны часовые пояса, установите утилиту tzdata:

Так при ручной синхронизации, часто бывают ошибки вида:

В этом случае проверьте правила firewalld / iptables, и убедитесь, что у вас на сервере открыт UDP порт 123. Так же некоторые хосты синхронизации могут быть недоступны в момент проверки.

Chrony — это гибкая реализация протокола сетевого времени — Network Time Protocol (NTP). Используется для синхронизации системных часов с различных NTP-серверов, эталонных часов или с помощью ручного ввода.

Также можно его использовать как сервер NTPv4 для синхронизации времени других серверов в той же сети. Chrony предназначен для безупречной работы в различных условиях, таких как прерывистое сетевое подключение, перегруженные сети, изменение температуры, что может повлиять на отсчет времени в обычных компьютерах.

Chrony поставляется с двумя программами:

  • chronyc — интерфейс командной строки для службы Chrony;
  • chronyd — служба, которая может быть запущена во время загрузки системы.

1.1. Установка программы.

Внимание! В CentOS 7 данная утилита уже идет в комплекте даже при минимальной комплектации установщика. Устанавливать отдельно в CentOS 7 утилиту chrony не надо.

Для CentOS 8 из официальных репозиториев убрали ntp и ntpdate, поэтому для синхронизации времени нужно использовать chrony.

Основные преимущества chrony:

  • высокая скорость и точность синхронизации;
  • корректная работа при отсутствии доступа к эталонным часам (ntpd требуются регулярные запросы);
  • по умолчанию не меняет сразу время при синхронизации, чтобы не нарушить работу программ.

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


В данном ответе CentOS 7 уже имеет синхронизацию и настроена корректно. Устанавливать утилиту chrony не надо.

Утилита timedatectl также позволяет изменить время:


Если по каким-либо причинам chrony у вас не установлена, то ответ будет такой, как на картинке-примере ниже. В этом случае для синхронизации времени нужно установить и использовать chrony.


Если у вас она не стоит, что видно по скриншоту, то установим и настроим вручную:

Как и любой другой сервис, после установки chrony нужно включить и добавить в автозагрузку:

1.2. Проверка работы программы.

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

Проверяем, нормально ли запустился:


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


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

Чтобы проверить, синхронизирован ли chrony на самом деле. Как и у ntp, у chrony есть интерфейс командной строки chronyc. Мы будем использовать его программу командной строки chronyc, которая имеет опцию отслеживания для предоставления соответствующей информации.


Перечисленные пункты содержат следующую информацию:

  • Reference ID — идентификатор и имя, с которым компьютер в настоящее время синхронизирован.
  • Stratum — количество переходов к компьютеру с установленными основными часами.
  • Ref time — это время по Гринвичу, в которое было выполнено последнее измерение из эталонного источника.
  • System time — задержка системных часов от синхронизированного сервера.
  • Last offset — расчетное смещение последнего обновления часов.
  • RMS offset — долгосрочное среднее арифметическое значения смещения.
  • Frequency — это частота, на которой часы системы будут работать неправильно, если хронограф не проведет коррекцию. Она выражена в ppm, то есть ч/м (частей на миллион).
  • Residual freq — остаточная частота указывает на разницу между измерениями от опорного источника и используемой в настоящее время частотой.
  • Skew — расчетная погрешность, связанная с погрешностью частоты.
  • Root delay — суммарная задержка сетевого пути к опорному серверу, с которым синхронизируется компьютер.
  • Leap status — это статус, который может иметь одно из следующих значений: нормальное, добавить второй, удалить второй или не синхронизироваться.

1.4. Источники синхронизации.

Чтобы проверить информацию об источниках chrony, можно выполнить следующую команду:


1.5. Настройка параметров.

Конфигурационный файл chrony — /etc/chrony.conf .

В нем нужно указать список NTP серверов, которые нужно использовать для синхронизации.

Конфигурационный файл chrony находится по адресу /etc/chrony.conf .

Пример конфигурационного файла может выглядеть примерно так:

Приведенная выше конфигурация содержит следующую информацию:

  • server — данная директива описывает NTP-сервер, с которым необходимо синхронизироваться.
  • stratumweight — какую задержку следует добавить к источнику синхронизации для каждой группы. Значение по умолчанию: 0,0001.
  • driftfile — расположение и имя файла, содержащего данные смещения.
  • makestep — эта директива заставляет chrony постепенно корректировать любое смещение во времени путем снижения скорости или замедления хода часов по мере необходимости.
  • logdir — путь к файлу журнала chrony.

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


3.6. Остановка работы программы.

Остановить работу сервиса можно вот такой обычной командой:

Убрать из автозапуска этой командой:

2. Возможные ошибки и их устранение.

2.1. Проблема с Local/RTC временем.

Необходимо, что бы Local/RTC время было одинаковым.

При выводе результатов работы команды timedatectl , к результату постоянно приписывается абзац:


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

Если оффлайн часы сильно убегают значит не выставлен машинный таймер. Будем чинить!

Переключимся на сохранение локального, а не глобального (UTC) времени в BIOS.

Потом обновляем машинный таймер:

И будет всё точно как швейцарские часы!

Проверить успешность переключения этой же командой без параметров:

Как видно предупреждение исчезло!

2.2. Ошибка ручной синхронизации времени (timedatectl).

Аналогичная ошибка может возникать и при работе с утилитой timedatectl:


Теперь нужно отключить автоматическую синхронизацию в самой утилите timedatectl :

И выполнить команду по установке конкретного времени:


Всё стало хорошо!

2.3. Ошибка: Operation not permitted.

Так при ручной синхронизации, часто бывают ошибки вида:

28 Nov 10:12:39 ntpdate[897482]: sendto(185.217.191.98): Operation not permitted

В этом случае проверьте правила firewalld или iptables, и убедитесь, что у вас на сервере открыт UDP порт 123. Так же некоторые хосты синхронизации могут быть недоступны в момент проверки.

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

В этой статье вы узнаете как настраивать дату и время вручную. И, что более важно - как синхронизировать их с ntp сервером.

Это статьи про дату и время в CentOS 7.

Про дату и вермя в Rocky Linux и CentOS 8 читайте здесь

Узнать текущее системное время

Узнать текущее системное время можно командой date

Узнать текущее время BIOS

Узнать текущее системное время BIOS можно командой hwclock

date и hwclock могут показывать совершенно разное время

Сначала нужно задать время командой date

date MM DD hh mm CCYY.ss

Также можно вводить «date MMDDhhmmCCYY» без секунд, тогда секунды выставляются на ноль.

После выполнения date нужно внести новое установленное время в BIOS:

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

Синхронизация с ntp

Проверьте установлен ли ntp командой

Если ntp не установлен выполните

sudo yum install ntp

Проверьте запускается ли ntpd автоматически командой

systemctl list-unit-files | grep ntpd.s

Если ntpd неактивен (disabled) выполните

systemctl start ntpd
systemctl enable ntpd

Проверить добавлен ли сервис ntp в зону public в firewall можно командой

sudo firewall-cmd --get-services | grep ntp

Если ещё не добавлен, то чтобы разрешить UDP траффик от ntp выполните

firewall-cmd --permanent --add-service=ntp
firewall-cmd --reload

Отредактируйте файл ntp.conf с настройками сервера

Я нашёл зону Helsinki и добавляю строки

Теперь нужно перезапустить ntpd

systemctl restart ntpd

Проверить откуда берётся время можно командой

remote refid st t when poll reach delay offset jitter ============================================================================== time.cloudflare 10.79.8.177 3 u 14 64 7 3.987 -0.366 0.016 37.228.129.2 193.66.253.94 2 u 16 64 7 5.301 -1.639 1.908 ivanova.ganneff 237.17.204.95 2 u 13 64 7 5.296 3.850 0.266 ntp23.kashra-se 192.168.100.15 2 u 12 64 5 32.935 -2.213 0.192

Выставить время BIOS по только что полученному времени можно командой

Заставить систему синхронизовать время с ntp

Можно следующей командой

Timezone

Узнать текущую временную зону

Local time: Fri 2021-05-21 01:42:44 MDT Universal time: Fri 2021-05-21 07:42:44 UTC RTC time: Fri 2021-05-21 07:42:43 Time zone: America/Denver (MDT, -0600) NTP enabled: yes NTP synchronized: yes RTC in local TZ: no DST active: yes Last DST change: DST began at Sun 2021-03-14 01:59:59 MST Sun 2021-03-14 03:00:00 MDT Next DST change: DST ends (the clock jumps one hour backwards) at Sun 2021-11-07 01:59:59 MDT Sun 2021-11-07 01:00:00 MST

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