systemd-timesyncd: разбор проблем со временем
timesyncd — это клиент синхронизации без серверной части: он подтягивает время и ничего не раздаёт. Главные причины отказа — служба отключена в пользу другого клиента, закрытый исходящий порт и виртуальная машина с нестабильным источником времени.
О службе
Служба реализует только клиентскую часть синхронизации: одностороннюю подстройку часов по внешним серверам. Она проще полноценных клиентов и не умеет ни раздавать время, ни работать с аппаратными источниками. Для машины, которой нужна лишь верная дата, этого достаточно; для узла, раздающего время другим, нужен отдельный клиент.
Одновременно с другим клиентом синхронизации работать нельзя: два процесса будут тянуть часы в разные стороны. Поэтому при установке chrony или ntpd timesyncd обычно отключается, и попытка «включить синхронизацию» через timedatectl set-ntp true в такой системе управляет уже другой службой или не даёт эффекта.
Отсутствие синхронизации бьёт по таймерам. Календарные таймеры считают моменты по показаниям часов: скачок времени вперёд означает немедленное срабатывание пропущенных заданий, скачок назад — долгое ожидание. Есть и отдельная цель готовности времени, которой пользуются службы, не переносящие неверных часов.
Как устроена
| Что умеет | только клиент синхронизации; сервер времени не раздаёт |
|---|---|
| Управление | timedatectl set-ntp true|false и timedatectl show |
| Серверы | параметры NTP= и FallbackNTP= в настройках синхронизации |
| Порт | исходящий UDP 123 — при его блокировке синхронизации не будет |
| Цель готовности | time-sync.target; ждать её должны службы, чувствительные к времени |
| Конфликт | с chrony и ntpd одновременно работать нельзя |
Частые ошибки
7 записей базы отмечены за этой службой.
Ошибки служб
- Время не синхронизируется: chronyd или systemd-timesyncdСлужба синхронизации времени работает, а время расходится: закрыт порт, конфликт двух служб, недоступны серверы.
Сообщения журнала
- Прыжок системного времени сбивает таймеры и сертификатыПосле синхронизации времени таймеры срабатывают не вовремя, а проверка сертификатов отказывает. Почему и что делать.
- clocksource: Marking clocksource unstableЯдро переключило источник времени. Службы видят скачки времени, таймеры срабатывают не тогда, когда ожидалось.
- Вход по доменной учётной записи не проходит: служба в автономном режимеДоменные пользователи не могут войти: служба не видит каталог и перешла в автономный режим.
- Служба синхронизации перевела часы скачкомВремя изменилось резко: расхождение было слишком велико для плавной подстройки. Последствия для таймеров и журнала.
Таймеры, сокеты, монтирование
- Пропущенное срабатывание таймера: Persistent и выключенная машинаТаймер не выполнил задачу, потому что в момент срабатывания машина была выключена или служба была недоступна. Как работает Persistent=true.
- Failed to parse calendar expression: ошибка в OnCalendarsystemd не разбирает календарное выражение таймера. Правила записи OnCalendar и проверка через systemd-analyze calendar.
Коды выхода этой службы
Числа в status=N ниже 200 назначает сама программа, 200 и выше — systemd, когда не смог подготовить запуск.
Диагностика
Часы, часовой пояс, состояние синхронизации — с этого стоит начинать.
timedatectlСинхронизировано ли время и включён ли клиент.
timedatectl show -p NTPSynchronized -p NTPСостояние службы и последние сообщения.
systemctl status systemd-timesyncd --no-pager | head -8Попытки синхронизации и выбранные серверы.
journalctl -u systemd-timesyncd -n 20 --no-pagerНет ли второго клиента синхронизации.
systemctl is-active chrony chronyd ntp ntpsec 2>/dev/nullПараметры unit, которые тут важны
- WantedBy=служба подключается к цели загрузки штатным включением
- ConditionPathExists=используется в дистрибутивах, чтобы не запускать клиент при наличии другого
Частые вопросы
timedatectl показывает «System clock synchronized: no» — это сбой?
Не обязательно. Так бывает сразу после загрузки, при отключённой службе или при заблокированном исходящем порту синхронизации. Проверьте состояние службы и наличие второго клиента.
Нужен ли timesyncd, если установлен chrony?
Нет. Два клиента синхронизации одновременно работать не должны: службу timesyncd в такой системе отключают.
Почему таймер сработал сразу после исправления времени?
Календарный таймер считает момент по часам. После перевода часов вперёд пропущенные моменты выглядят наступившими, и таймер с параметром запуска пропущенного срабатывает немедленно.
Источники
- systemd-timesyncd.service(8)
- systemd.timesyncd.conf(5)
- systemd.timedatectl(1)
- Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)