CentOS Налаштування дати і часу, пояси, синхронізація з NTP

У даній статті я розповім, як налаштувати час, дату і змінити часовий пояс (timezone) в Linux CentOS, як виконувати синхронізацію часу з NTP сервером і виправити типові помилки.

зміст:

  • Hwclock: настройка апаратного (системного) часу
  • Ручна настройка часу в CentOS
  • Налаштування часового поясу в CentOS
  • Налаштування синхронізація часу по NTP в CentOS
  • Використовуємо chronyd для синхронізація часу в CentOS 8
  • Поширені помилки при налаштуванні часу в CentOS

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

Абсолютна більшість програм в своїй роботі використовують час програмних годин.

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

Щоб перевірити апаратне час в Linux використовується утиліта hwclock:

  • hwclock --localtime - перевірка апаратного часу без поправки
  • hwclock --utc - перевірка часу з умовою, що апаратні годинник йде за часом UTC

[Root @ server etc] # hwclock --localtime

Wed 27 Nov 2019 11:28:28 AM +06 -1.012225 seconds

[Root @ server etc] # hwclock --utc

Wed 27 Nov 2019 5:28:30 PM +06 -0.045476 seconds

Щоб встановити апаратне час рівне системному часу, виконайте команду:

# Hwclock --systohc

Щоб встановити конкретний час, виконайте:

# Hwclock --set --date "27 Nov 2019 17:30"

Ручна настройка часу в CentOS

У Linux за програмне час відповідає утиліта date або timedatectl. Якщо викликати утиліту date без параметрів, вона покаже поточний час на сервері:

[Root @ server etc] # date

Wed Nov 27 17:40:56 +06 2019

Якщо ви хочете виставити час вручну, можна скористатися утилітою date з додатковими ключами:

# Date MMDDhhmm

Де MM - місяць, DD - день, hh - годину, mm - хвилини.

наприклад:

# Date 11261740

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

Timedatectl також дозволяє змінити час:

# Timedatectl set-time '2019-11-27 17:51:00'

Налаштування часового поясу в CentOS

Щоб час на сервері CentOS Linux відповідало вашому часовому поясу, його можна змінити вручну. Для цього є дві утиліти:

  • timedatectl
  • tzdata

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

# Timedatectl set-timezone Europe / Moscow

Або ж можна використовувати tzdata. Щоб скористатися даним методом, потрібно замінити файл / Etc / localtime на потрібний вам. Весь список часових поясів, розташований в директорії / usr / share / zoneinfo /. Замінимо часовий пояс на Asia / Almaty. Робимо бекап файлу locatime:

# Mv / etc / localtime /etc/localtime.bak

Створюємо симлінк на потрібний часовий пояс:

# Ln -s / usr / share / zoneinfo / Asia / Almaty / etc / localtime

Налаштування синхронізація часу по NTP в CentOS

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

# Yum install ntp -y

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

# Systemctl start ntpd.service
# Systemctl enable ntpd.service

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

[Root @ server Asia] # service ntpd status

Redirecting to / bin / systemctl status ntpd.service ● ntpd.service - Network Time Service Loaded: loaded (/usr/lib/systemd/system/ntpd.service; enabled; vendor preset: disabled) Active: active (running) since Thu 2019-11-28 9:47:33 +06; 5min ago Main PID: 3057 (ntpd) CGroup: /system.slice/ntpd.service └─3057 / usr / sbin / ntpd -u ntp: ntp -g 

У файлі /etc/ntp.conf потрібно вказати сервера, з якими потрібно синхронізувати час:

server 0.pool.ntp.org server 1.pool.ntp.org server 2.pool.ntp.org

Синхронізація часу виконується послідовно. Якщо недоступний перший NTP сервер, йде звернення до другого і т.д.

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

# Ntpdate 192.168.1.100

За замовчуванням, ntpd включає в системі режим "11 minute mode", тобто час буде синхронізуватися кожні 11 хвилин. Якщо ви не можете використовувати демон ntpd, ви можете налаштувати синхронізацію часу по крону, додайте в крон наступну команду:

# Ntpdate pool.ntp.org

Використовуємо chronyd для синхронізація часу в CentOS 8

Для CentOS 8 з офіційних репозиторіїв прибрали ntp і ntpdate, тому для синхронізації часу потрібно використовувати chrony.

Основні переваги chrony:

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

За замовчуванням, утиліта chrony вже встановлена ​​в системі, але якщо з якоїсь причина у вас її немає, виконайте установку:

# Dnf install chrony

Як і будь-який інший сервіс, після установки chrony потрібно включити і додати в автозавантаження:

# Systemctl start chronyd
# Systemctl enable chronyd

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

Щоб перевірити, що синхронізація працює, виполнітіте команду:

# Timedatectl status

NTP Service: active

конфігураційний файл chrony - /etc/chrony.conf. У ньому потрібно вказати список NTP серверів, які потрібно використовувати для синхронізації. Як і у ntp, у chrony є інтерфейс командного рядка chronyc. Щоб перевірити інформацію про поточні параметри синхронізації часу, використовуйте:

# Chronyc tracking

Щоб перевірити інформацію про серверах синхронізації, виконайте команду:

# Chronyc sources

Якщо ви хочете встановити конкретний час і дату вручну, ви можете скористатися утилітою date, але перед цим потрібно відключити демон chronyd.

Поширені помилки при налаштуванні часу в CentOS

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

При ручної синхронізації часу, у вас може виникнути подібна помилка:

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

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

# Service ntpd stop

І почніть синхронізацію заново:

Аналогічна помилка може виникати і при роботі з утилітою timedatectl:

Failed to set time: Automatic time synchronization is enabled.

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

# Timedatectl set-ntp 0

І виконати команду по установці конкретного часу:

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

# Yum install tzdata -y

Так при ручної синхронізації, часто бувають помилки виду:

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

В цьому випадку перевірте правила firewalld / iptables, і переконайтеся, що у вас на сервері відкритий UDP порт 123. Так само деякі хости синхронізації можуть бути недоступні в момент перевірки.