Время на сервере Ubuntu не синхронизируется: три демона мешают друг другу, а нужный оказался замаскирован

Что было. На виртуальной машине с 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.

  1. Посмотреть состояние: timedatectl status и timedatectl timesync-status. Строки NTP service: active и System clock synchronized: yes означают, что всё работает.
  2. Одна служба на выбор. По умолчанию это systemd-timesyncd (лёгкий клиент, достаточно для обычного сервера). Если поставили chrony, пакет сам отключит timesyncd, и timedatectl set-ntp перестанет им управлять: смотреть chronyc tracking.
  3. Если timesyncd замаскирован: systemctl unmask systemd-timesyncd && systemctl enable --now systemd-timesyncd, затем timedatectl set-ntp true.
  4. Не ставить ntp (устаревший ntpd) без необходимости.

Особенности виртуальной машины. Аппаратные часы виртуальной машины могут «плыть» при паузах и миграциях. Если сдвиг после перезагрузки большой, timesyncd подстраивает его сразу, chrony с параметром makestep тоже. Убедитесь, что в госте не включена одновременно синхронизация через агент гипервизора и NTP: две правки часов из разных источников дают скачки. Обычно достаточно оставить NTP внутри гостя.

Почему это важно. Неверное время ломает TLS (сертификат «ещё не действителен»), двухфакторные коды, журналы и репликацию баз данных. Проверка времени должна стоять первой в любом чек-листе «ничего не работает после перезагрузки».

Синхронизация времени описана в документации Ubuntu Server.