Что было. На виртуальной машине с Ubuntu Server 22.04 часы отставали. Администратор по очереди поставил ntp, затем chrony, менял часовой пояс через tzselect, но timedatectl упорно показывал System clock synchronized: no. В итоге выяснилось, что systemd-timesyncd, штатная служба синхронизации, находилась в состоянии masked, а два дополнительно установленных демона конфликтовали за один порт.
Что помогло. Автор привёл в порядок часовой пояс (timedatectl set-timezone Europe/Berlin, dpkg-reconfigure tzdata) и оставил одну службу синхронизации. Часы сошлись. Участники отметили, что весь рецепт есть в документации, и что ставить второй NTP-клиент поверх первого не нужно.
Как правильно на Ubuntu.
- Посмотреть состояние:
timedatectl statusиtimedatectl timesync-status. СтрокиNTP service: activeиSystem clock synchronized: yesозначают, что всё работает. - Одна служба на выбор. По умолчанию это
systemd-timesyncd(лёгкий клиент, достаточно для обычного сервера). Если поставилиchrony, пакет сам отключит timesyncd, иtimedatectl set-ntpперестанет им управлять: смотретьchronyc tracking. - Если timesyncd замаскирован:
systemctl unmask systemd-timesyncd && systemctl enable --now systemd-timesyncd, затемtimedatectl set-ntp true. - Не ставить
ntp(устаревший ntpd) без необходимости.
Особенности виртуальной машины. Аппаратные часы виртуальной машины могут «плыть» при паузах и миграциях. Если сдвиг после перезагрузки большой, timesyncd подстраивает его сразу, chrony с параметром makestep тоже. Убедитесь, что в госте не включена одновременно синхронизация через агент гипервизора и NTP: две правки часов из разных источников дают скачки. Обычно достаточно оставить NTP внутри гостя.
Почему это важно. Неверное время ломает TLS (сертификат «ещё не действителен»), двухфакторные коды, журналы и репликацию баз данных. Проверка времени должна стоять первой в любом чек-листе «ничего не работает после перезагрузки».
Синхронизация времени описана в документации Ubuntu Server.