Привет, %username%
! Для синхронизации времени в Linux традиционно используется ntpd
как стандарт де-факто, но есть альтернатива в виде systemd-timesyncd
. Посмотрим как оно настраивается и включается, а ntpd
забудем и удалим.
С ntpd
все довольно просто: ставится пакет ntp
, настраивается файл конфигурации /etc/ntp.conf
и включается служба через systemctl start ntp
, далее с помощью утилиты ntpstat
проверяем синхронизацию локальных часов с удаленным сервером.
Стоит так же заметить, что с помощью ntpd
можно еще и выступать в качестве сервера времени для других. То есть ntpd
принимает входящие соединения и если его некорректно настроить, то он может стать участником DDoS-атаки (см. NTP amplification attack (CVE-2013-5211)).
Во всех дистрибутивах с systemd
есть встроенная альтернатива ntpd
— systemd-timesyncd
. Так же следует дать вот эту ссылку, где есть детальное сравнение 3-х реализаций демонов синхронизации времени.
Удаляем лишнее:
sudo apt-get remove ntp ntpstat --purge
sudo apt autoremove
Обязательно следует удалить ntpd
или chronyd
до запуска systemd-timesyncd
иначе последний не будет синхронизировать время, а за данную проверку отвечает файл /lib/systemd/system/systemd-timesyncd.service.d/disable-with-time-daemon.conf
в котором прописан список бинарников, при наличии которых в системе демон systemd-timesyncd
не будет работать.
Настроим уже systemd-timesyncd
, а для этого в файл /etc/systemd/timesyncd.conf
пропишем список серверов времени и приведем его к такому виду:
cat /etc/systemd/timesyncd.conf
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# Entries in this file show the compile time defaults.
# You can change settings by editing this file.
# Defaults can be restored by simply deleting this file.
#
# See timesyncd.conf(5) for details.
[Time]
NTP=192.168.0.11 192.168.0.12 ntp1.stratum2.ru ntp1.stratum1.ru
FallbackNTP=ntp.ubuntu.com
#RootDistanceMaxSec=5
#PollIntervalMinSec=32
#PollIntervalMaxSec=2048
Смотрим текущий статус синхронизации часов:
sudo timedatectl status
Результат:
Local time: Fri 2020-11-27 20:22:14 MSK
Universal time: Fri 2020-11-27 17:22:14 UTC
RTC time: Fri 2020-11-27 17:22:14
Time zone: Europe/Moscow (MSK, +0300)
Network time on: yes
NTP synchronized: yes
RTC in local TZ: no
В строке NTP synchronized
может стоять no
если синхронизация часов по ntp
до этого не была настроена вообще или yes
, если до этого часы синхронизировались с помощью ntpd
.
Включаем использование systemd-timesyncd
для синхронизации времени:
sudo timedatectl set-ntp true
Включаем и перезапускаем службу systemd-timesyncd:
sudo systemctl enable --now systemd-timesyncd.service
sudo systemctl restart systemd-timesyncd.service
Проверяем статус:
sudo systemctl status systemd-timesyncd.service
● systemd-timesyncd.service - Network Time Synchronization
Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled)
Drop-In: /lib/systemd/system/systemd-timesyncd.service.d
└─disable-with-time-daemon.conf
Active: active (running) since Fri 2020-11-27 20:25:36 MSK; 6s ago
Docs: man:systemd-timesyncd.service(8)
Main PID: 7181 (systemd-timesyn)
Status: "Synchronized to time server 192.168.0.11:123 (192.168.0.11)."
Tasks: 2 (limit: 4915)
Memory: 860.0K
CPU: 37ms
CGroup: /system.slice/systemd-timesyncd.service
└─7181 /lib/systemd/systemd-timesyncd
Nov 27 20:25:36 mixitnew systemd[1]: Starting Network Time Synchronization...
Nov 27 20:25:36 mixitnew systemd[1]: Started Network Time Synchronization.
Nov 27 20:25:36 mixitnew systemd-timesyncd[7181]: Synchronized to time server 192.168.0.11:123 (192.168.0.11).
Через несколько минут можно проверить с помощью timedatectl
состояние синхронизации:
sudo timedatectl status
Local time: Fri 2020-11-27 20:26:33 MSK
Universal time: Fri 2020-11-27 17:26:33 UTC
RTC time: Fri 2020-11-27 17:26:34
Time zone: Europe/Moscow (MSK, +0300)
Network time on: yes
NTP synchronized: yes
RTC in local TZ: no
Значение в строке NTP synchronized
должно измениться на yes
Если systemd-timesyncd
не синхронизирует часы, то прежде всего проверьте настройки межсетевого экрана на предмет разрешения исходящих подключений на 123
порт по протоколу UDP
.
Детальную информацию о состоянии синхронизации времени можно посмотреть командой:
sudo timedatectl timesync-status
Утилиту timedatectl
так же можно использовать для смены часового пояса, пример выведем список временных зон:
sudo timedatectl list-timezones
Установим временную зону Europe/Moscow:
sudo timedatectl set-timezone Europe/Moscow
Проверим:
date
Результат:
Fri Nov 27 20:31:52 MSK 2020
MSK
свидетельствует об установке нашей зоны (Europe/Moscow
это UTC+03
)
На этом все! Profit!
UPD: На Ansible Galaxy есть моя ролька для автоматизации – jtprogru.configure_timesyncd.
Если у тебя есть вопросы, комментарии и/или замечания – заходи в чат, а так же подписывайся на канал.