Служба синхронизации перевела часы скачком
При большом расхождении служба синхронизации не подстраивает часы плавно, а переводит их скачком. Для системы это означает разрыв в журнале, сработавшие или пропущенные таймеры и неверные измерения длительности в приложениях.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Расхождение превысило порог плавной подстройки
Плавная подстройка применима к небольшим расхождениям. Большое расхождение переводится скачком.
-
Таймеры сработали или были пропущены
Перевод часов вперёд выглядит как наступление пропущенных моментов, назад — как долгое ожидание.
-
Аппаратные часы расходятся с системными
После перезагрузки время берётся из аппаратных часов. Их расхождение повторяет ситуацию при каждой загрузке.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Часы, часовой пояс, синхронизация и аппаратные часы.
timedatectlКогда время менялось скачком.
journalctl -b --no-pager | grep -i "Time has been changed" | tailСостояние таймеров после перевода часов.
systemctl list-timers --all --no-pager | headРешение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Плавная подстройка применима к небольшим расхождениям. Большое расхождение переводится скачком.
- Как проверить
-
Посмотрите сообщения о переводе часов.
journalctl -b --no-pager | grep -iE "Time has been changed|System clock time unset|step" | tail timedatectl
- Как исправить
- Разберитесь, почему часы разошлись: обычно это остановленная служба синхронизации или неверное время в аппаратных часах. Скачок — следствие, а не причина.
- Почему происходит
- Перевод часов вперёд выглядит как наступление пропущенных моментов, назад — как долгое ожидание.
- Как проверить
-
Посмотрите таймеры и время их срабатываний.
systemctl list-timers --all --no-pager | head journalctl -b --no-pager | grep -i "Time has been changed" | tail -3
- Как исправить
- Для заданий, чувствительных к скачкам, используйте отсчёт от события вместо календарных моментов. Плюс проверьте, не выполнились ли задания дважды.
- Почему происходит
- После перезагрузки время берётся из аппаратных часов. Их расхождение повторяет ситуацию при каждой загрузке.
- Как проверить
-
Сравните системные и аппаратные часы.
timedatectl | grep -iE "RTC|Universal" sudo hwclock --show 2>/dev/null
- Как исправить
- Синхронизируйте аппаратные часы с системными после настройки времени. Иначе каждая загрузка начинается с неверного времени.
Пример вывода
Служба синхронизации перевела часы на четыре часа вперёд. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
systemd-timesyncd[730]: Initial clock synchronization to Mon 2026-09-15 19:02:11.402310 MSK.
systemd[1]: Time has been changed
systemd[1]: mytask.timer: Adjusting timer to elapsed time.
systemd[1]: Started mytask.service - Nightly task.
Связанные ошибки
- Прыжок системного времени сбивает таймеры и сертификаты После синхронизации времени таймеры срабатывают не вовремя, а проверка сертификатов отказывает. Почему и что делать.
- clocksource: Marking clocksource unstable Ядро переключило источник времени. Службы видят скачки времени, таймеры срабатывают не тогда, когда ожидалось.
- Пропущенное срабатывание таймера: Persistent и выключенная машина Таймер не выполнил задачу, потому что в момент срабатывания машина была выключена или служба была недоступна. Как работает Persistent=true.
- Таймер срабатывает позже указанного времени Задание запускается на минуту позже: по умолчанию таймеры группируются для экономии пробуждений.
- Failed to parse calendar expression: ошибка в OnCalendar systemd не разбирает календарное выражение таймера. Правила записи OnCalendar и проверка через systemd-analyze calendar.
- status=212/TIMERSLACK в systemd Код 212/TIMERSLACK: не удалось задать допуск таймеров процесса из TimerSlackNSec=. Редкий код.
- systemd-resolved: DNSSEC validation failed, имена не разрешаются Часть имён не разрешается при работающей службе: проверка подписей отвергает ответы промежуточного сервера.
- unbound: проверка подписей не проходит, имена не разрешаются Служба работает, но все ответы отбрасываются: неверное время, устаревший корневой ключ или права на его файл.
Где встречается чаще всего
Источники
-
systemd-timesyncd.service(8)
Начальная синхронизация и перевод часов. -
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Проверено на systemd 255: при большом расхождении часы переводятся скачком с записью в журнал.