У даній статті я розповім, як налаштувати час, дату і змінити часовий пояс (timezone) в Linux CentOS, як виконувати синхронізацію часу з NTP сервером і виправити типові помилки.
На серверах існує два види годин. Апаратні (real time clock), які працюють навіть при вимкненому сервері і програмні годинник операційної системи. Показання цих двох годин, можуть відрізнятися. При цьому, після запуску операційної системи, програмні годинник спираються на свідчення апаратних і надалі можуть коригуватися системою.
Абсолютна більшість програм в своїй роботі використовують час програмних годин.
Hwclock: настройка апаратного (системного) часу
Щоб перевірити апаратне час в Linux використовується утиліта годинник:
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 05:28:30 PM +06 -0.045476 seconds
Щоб встановити апаратне час рівне системному часу, виконайте команду:
# hwclock --systohc
Щоб встановити конкретний час, виконайте:
# hwclock --set --date "27 Nov 2019 17:30"
Ручна настройка часу в CentOS
У Linux за програмне час відповідає утиліта дата або timedatectl. Якщо викликати утиліту дата без параметрів, вона покаже поточний час на сервері:
[root@server etc]# date
Wed Nov 27 17:40:56 +06 2019
Якщо ви хочете виставити час вручну, можна скористатися утилітою дата з додатковими ключами:
# date MMDDhhmm
Де MM – місяць, DD – день, hh – годину, mm – хвилини.
наприклад:
# date 11261740
Для отримання розширеної інформації про дату, час, поясі, синхронізації, настройках переходу на сезонний (літній / зимовий) час (DST), використовується утиліта timedatectl. Вона дає більш детальну інформацію про екологічні атрибути Вашого часу на сервері.
Timedatectl також дозволяє змінити час:
# timedatectl set-time '2019-11-27 17:51:00'
Налаштування часового поясу в CentOS
Щоб час на сервері CentOS Linux відповідало вашому часовому поясу, його можна змінити вручну. Для цього є дві утиліти:
Щоб змінити часовий пояс через утиліту timedatectl, Виконайте команду:
# timedatectl set-timezone Europe/Moscow
Або ж можна використовувати тздата. Щоб скористатися даним методом, потрібно замінити файл / etc / localtime на потрібний вам. Весь список часових поясів, розташований в директорії / usr / share / zoneinfo /. Замінимо часовий пояс на Азія / Алмати. Робимо бекап файлу 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 09: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:
- висока швидкість і точність сінхронізціі
- коректна робота при відсутності доступу до еталонних годин (ntpd потрібні регулярні запити)
- по-замовчуванню не змінює відразу час при синхронізації, щоб не порушити роботу програм
- Менше використовує ресурсів
За замовчуванням, утиліта хронічність вже встановлена в системі, але якщо з якоїсь причина у вас її немає, виконайте установку:
# dnf install chrony
Як і будь-який інший сервіс, після установки chrony потрібно включити і додати в автозавантаження:
# systemctl start chronyd
# systemctl enable chronyd
Перевірити стан обслуговування:
Щоб перевірити, що синхронізація працює, виполнітіте команду:
# timedatectl status
NTP Service: active
конфігураційний файл хронічність – /etc/chrony.conf. У ньому потрібно вказати список NTP серверів, які потрібно використовувати для синхронізації. Як і у ntp, у хронічність є інтерфейс командного рядка хронік. Щоб перевірити інформацію про поточні параметри синхронізації часу, використовуйте:
# chronyc tracking
Щоб перевірити інформацію про серверах синхронізації, виконайте команду:
# chronyc sources
Якщо ви хочете встановити конкретний час і дату вручну, ви можете скористатися утилітою дата, Але перед цим потрібно відключити демон хронід.
Поширені помилки при налаштуванні часу в 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
І виконати команду по установці конкретного часу:
При роботі з часовими поясами, вони можуть бути не встановлені у вас на сервері і створити симлінк для місцевий час не вийде. Для того, щоб в системі були доступні часові пояси, встановіть утиліту тздата:
# yum install tzdata -y
Так при ручної синхронізації, часто бувають помилки виду:
28 Nov 10:12:39 ntpdate[897482]: sendto(185.217.191.98): Operation not permitted
В цьому випадку перевірте правила firewalld / iptables, і переконайтеся, що у вас на сервері відкритий UDP порт 123. Так само деякі хости синхронізації можуть бути недоступні в момент перевірки.