суббота, 20 мая 2023 г.

Переключение синхронизации времени в Linux Mint xfce на systemd

При использовании на своих компьютерах Linux с графическими окружениями Cimmanon и xfce замечено, что в них используются разные способы синхронизации времени: через systemd в Cinnamon и через службу ntp в xfce. Поэтому с целью некого подобия стандартизации было принято решение переключить синхронизацию времени в Linux Mint xfce на systemd.

Отсутствие синхронизации времени через systemd в Linux Mint xfce можно проверить через команду  systemctl status systemd-timesyncd.service 

systemd-timesyncd.service
     Loaded: masked (Reason: Unit systemd-timesyncd.service is masked.)
     Active: inactive (dead)

Состояние синхронизации в Linux Mint xfce отображается через  ntpq -p 

Звёздочкой будет показан используемый сервер времени на момент запроса. Подробнее о синхронизации времени в xfce можно прочитать здесь.

Сначала настроим файл конфигурации службы:  sudo xed /etc/systemd/timesyncd.conf

[Time]
NTP=
FallbackNTP=ntp.ubuntu.com
RootDistanceMaxSec=5
PollIntervalMinSec=32
PollIntervalMaxSec=2048

NTP – один или несколько ntp серверов через пробелы;

FallbackNTP – один или несколько резервных ntp серверов;

RootDistanceMaxSec – максимальное время в секундах, за которое пакет от сервера эталонного времени должен доходить до сервера к которому вы подключены;

PollIntervalMinSec и PollIntervalMaxSec – минимальный и максимальный интервалы синхронизаций времени. Вначале используется минимальный интервал, а затем он увеличивается если система видит что локальное время со временем ntp-сервера не расходится. По умолчанию минимальный интервал устанавливается в 32 секунды, а максимальный в 32 минуты 8 секунд (2048 с). Минимальный интервал не может быть менее 16 секунд. Максимальное значение не ограничивается. 

В строке NTP= можно вписать 0.ubuntu.pool.ntp.org 1.ubuntu.pool.ntp.org 2.ubuntu.pool.ntp.org 3.ubuntu.pool.ntp.org, либо 0.pool.ntp.org, 1.pool.ntp.org, 2.pool.ntp.org, 3.pool.ntp.org, либо сервер(ы) времени, предоставляемые вашим провайдером Интернет, либо указать выбранные вами из личных предпочтений. Можно попробовать автоматический выбор из пула, например, NTP=by.pool.ntp.org  

Server: 194.158.196.172 (by.pool.ntp.org)
Poll interval: 17min 4s (min: 32s; max 34min 8s)
Leap: normal
Version: 4
Stratum: 2
Reference: 596DFB18
Precision: 1us (-23)
Root distance: 64.040ms (max: 5s)
Offset: +145us
Delay: 3.899ms
Jitter: 112us
Packet count: 5
Frequency: -6,452ppm

В строке FallbackNTP можно указать ntp.ubuntu.com либо другой сервер, который вам известен, например, time.google.com. На мой взгляд, предпочтительнее указать time.cloudflare.com, до которого "достучаться" можно минимум в 3 раза быстрее, чем до time.google.com и раз в 10 быстрее, чем до ntp.ubuntu.com (утверждение основано на моих результатах команды ping). Если имеется возможность настройки своего сервера DNS (например, на маршрутизаторе), то можно сделать запись типа CHAME, которая укажет, что узлу ntp.ubuntu.com соответствует узел time.cloudflare.com

Кроме указанных строк может ещё присутствовать строка ConnectionRetrySec= (отсутствует по умолчанию). Она отвечает за интервал между последующими попытками синхронизации с другими серверами времени, если первый сервер в списке не ответил. По умолчанию принимается значение 30 секунд и не может быть менее 1 секунды (подбробности). 

Примечание. Если сервер DHCP выдаёт адреса серверов времени, то поле NTP можно не заполнять, так как эти значения будут иметь наивысший приоритет и использоваться для синхронизации в первую очередь. В случае недоступности таких серверов будет выполняться синхронизация с серверами, указанными в поле NTP, а если недоступны и они, тогда синхронизация времени будет произведена в сервером, указанным в FallbackNTP. Пример выдачи сервером DHCP MikroTik адресов серверов точного времени:


[Time]
NTP=
FallbackNTP=time.google.com

Результат при запросе состояния синхронизации: Server: 31.130.200.2 (31.130.200.2)

Дополнительно. Пишут, что при использовании systemd-timesync служба не может осуществлять выборы между узлами пула серверов NTP на предмет определения наиболее лучшего из них, как это реализовано в службе NTP. Однако для домашних компьютеров использование systemd для синхронизации времени компьютера с серверами точного времени является вполне приемлемым. Но в Linux Mint (Ubuntu) это может не работать. Как заставить systemd-timesync понимать адреса серверов NTP, которые предоставляет DHCP, читайте здесь.

Далее выполняется команда: 

sudo apt purge -y ntp && sudo apt install -y systemd-timesyncd

Включаем использование  systemd-timesyncd  для синхронизации времени:

sudo timedatectl set-ntp true

Включаем и перезапускаем службу  systemd-timesyncd:

sudo systemctl enable --now systemd-timesyncd.service && sudo systemctl restart systemd-timesyncd.service

Всё можно сделать одной командой:

sudo apt purge -y ntp && sudo apt install -y systemd-timesyncd && sudo timedatectl set-ntp true && sudo systemctl enable --now systemd-timesyncd.service && sudo systemctl restart systemd-timesyncd.service

Проверяем состояние службы:  systemctl status systemd-timesyncd.service

...
Status: "Initial synchronization to time server 31.130.200.2:123 (ns1.datahata.by)."
...

Через 1-2 минуты можно проверить состояние синхронизации времени компьютера:  timedatectl status

...
Time zone: Europe/Moscow (MSK, +0300)
System clock synchronized: yes
              NTP service: active

Детальную информацию о состоянии синхронизации времени можно посмотреть командой  timedatectl timesync-status

Графического инструмента, который отображал бы информацию о расхождении часов вашего компьютера с сервером точного времени в службе systemd-timesyncd не имеется. Но можно воспользоваться сторонними решениями. Мне, например, понравилось предоставление информации с этого сайта.

После старта системы более часа назад расхождение по времени в момент запроса на моё восприятие оказалось неожиданно минимальным:

С течением времени смещение часов относительно сервера точного времени может меняться в определённых пределах. Например, после развёртывания в локальной сети своего сервера NTP и указания службе времени синхронизироваться именно с него смещение может достигать очень маленьких значений, например:

Для получения информации о состоянии синхронизации можно на рабочем столе создать значок запуска с именем NTP status, указав команду 

 xfce4-terminal -H -x sh -c "timedatectl timesync-status; exec bash"


и значок, которым будет отображаться вызов данной команды. Для вызова из меню приложений созданный значок запуска переместите в скрытый каталог  

 /home/ваш_каталог/.local/share/applications

В нём появится файл  NTP status.desktop  с содержанием

[Desktop Entry]
Version=1.0
Type=Application
Name=NTP status
Comment=
Exec=xfce4-terminal -H -x sh -c 'timedatectl timesync-status; exec bash'
Icon=dcc_nav_datetime
Path=
Terminal=false
StartupNotify=false

Если необходимо, добавьте пояснение в поле Comment=

По умолчанию этот значок (кнопка) запуска будет расположен в категории "Прочее". Если нужно, чтобы он отображался, например, в категории "Система", то добавьте строку (открыть в текстовом редакторе) 

Categories=Network;System;

Содержание файла NTP status.desktop  может быть и немного другим, если при создании значка запуска была установлена галочка в поле "Запускать в терминале (актуально для Cinnamon), а команда указана как

sh -c 'timedatectl timesync-status | cat - /dev/tty'

[Desktop Entry]
Version=1.0
Type=Application
Name=NTP status
Comment=
Exec=sh -c 'timedatectl timesync-status | cat - /dev/tty'
Icon=dcc_nav_datetime
Path=
Terminal=true
StartupNotify=false

При вызове сведений о состоянии синхронизации времени по этому значку отобразится окно терминала с отображаемой информацией.

Пример вывода:

Server: 31.130.200.2 (31.130.200.2)
Poll interval: 17min 4s (min: 32s; max 34min 8s)
Leap: normal
Version: 4
Stratum: 2
Reference: 596DFB18
Precision: 1us (-23)
Root distance: 16.868ms (max: 5s)
Offset: -420us
Delay: 2.028ms
Jitter: 390us
Packet count: 6
Frequency: -1,643ppm

Интерес могут представлять следующие сведения:

Server:  IP-адрес сервера, с которым было синхронизировано время;

Poll interval:  время, прошедшее с последней синхронизации с сервером времени. Также будет указаны значения минимального и максимального промежутков между запросами синхронизации времени (min: 32s; max 34min 8s). Эти значения считываются из файла настройки /etc/systemd/timesyncd.conf (строки PollIntervalMin и PollIntervalMax);

Stratum:  класс точности сервера времени, с которым была произведена синхронизация;

Offset:  расхождение ваших часов и сервера времени, с которым была произведена синхронизация;

Delay:  время задержки на запрос о синхронизации времени;

Jitter:  мера статистических отклонений от значения смещения по нескольким успешным парам запрос-ответ. Чем это значение меньше, тем время синхронизируется точнее.

Packet count:  количество отправленных запросов с момента старта службы синхронизации времени. 

Значение ms соответствует миллисекунд, а значение us соответствует микросекунд (хвостик буквы "мю" вниз не отобразился).

🔰   Дополнение. 

Если нужно, чтобы у вас отобразилось окно терминала на определённое количество секунд, например, 25, то сделайте следующее:

1) создайте исполняемый файл timesync.sh с содержанием:

#!/bin/bash
sh -c '
'timedatectl timesync-status | cat - /dev/tty' &
sleep 25
exit

2) в созданном лаунчере (см. выше) измените

Exec=sh -c 'timedatectl timesync-status | cat - /dev/tty'

на Exec=полный_путь_к_timesync.sh


При написании были использованы материалы этого источника

Комментариев нет:

Отправить комментарий