У даній статті я розповім, як налаштувати час, дату і змінити часовий пояс (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. Так само деякі хости синхронізації можуть бути недоступні в момент перевірки.