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. Если у Вас остались вопросы - задавайте их в комментариях.
На серверах существует два вида часов. Аппаратные (real time clock), которые работают даже при выключенном сервере и программные часы операционной системы. Показания этих двух часов, могут отличаться. При этом, после запуска операционной системы, программные часы опираются на показания аппаратных и в дальнейшем могут корректироваться системой.
Абсолютное большинство программ в своей работе используют время программных часов.
Hwclock: настройка аппаратного (системного) времени
Чтобы проверить аппаратное время в Linux используется утилита hwclock:
- hwclock --localtime — проверка аппаратного времени без поправки
- hwclock --utc – проверка времени с условием, что аппаратные часы идут по времени UTC
Чтобы установить аппаратное время равное системному времени, выполните команду:
Чтобы установить конкретное время, выполните:
Ручная настройка времени в CentOS
В Linux за программное время отвечает утилита date или timedatectl. Если вызывать утилиту date без параметров, она покажет текущее время на сервере:
Если вы хотите выставить время вручную, можно воспользоваться утилитой date с дополнительными ключами:
Где MM – месяц, DD — день, hh – час, mm – минуты.
Для получения расширенной информации о дате, времени, поясе, синхронизации, настройках перехода на сезонное (летнее/зимнее) время (DST), используется утилита timedatectl. Она дает более подробную информацию о настройках времени на сервере.
Timedatectl также позволяет изменить время:
Настройка часового пояса в CentOS
Чтобы время на сервере CentOS Linux соответствовало вашему часовому поясу, его можно изменить вручную. Для этого есть две утилиты:
Чтобы изменить часовой пояс через утилиту timedatectl, выполните команду:
Или же можно использовать tzdata. Чтобы воспользоваться данным методом, нужно заменить файл /etc/localtime на нужный вам. Весь список часовых поясов, расположен в директории /usr/share/zoneinfo/. Заменим часовой пояс на Asia/Almaty. Делаем бэкап файла locatime:
Создаем симлинк на нужный часовой пояс:
Настройка синхронизация времени по 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 нужно включить и добавить в автозагрузку:
Проверим статус сервиса:
Чтобы проверить, что синхронизация работает, выполнитите команду:
Чтобы проверить информацию о серверах синхронизации, выполните команду:
Если вы хотите установить конкретное время и дату вручную, вы можете воспользоваться утилитой date, но перед этим нужно отключить демон chronyd.
Распространённые ошибки при настройке времени в CentOS
В данном разделе, я опишу частые ошибки, которые возникают при работе с утилитами timedatectl, ntp.
При ручной синхронизации времени, у вас может возникнуть подобная ошибка:
Она означает, что у вас запущен демон ntpd, который блокирует ручную синхронизация времени. Чтобы выполнить ручную синхронизацию, остановите демон ntpd:
И запустите синхронизацию заново:
Аналогичная ошибка может возникать и при работе с утилитой timedatectl:
Теперь нужно отключить автоматическую синхронизацию в самой утилите timedatectl:
И выполнить команду по установке конкретного времени:
При работе с часовыми поясами, они могут быть не установлены у вас на сервере и создать симлинк для 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
Читайте также: