SystemdDoctor

Прыжок системного времени сбивает таймеры и сертификаты

Резкий сдвиг системного времени влияет на всё, что от него зависит: календарные таймеры пересчитывают срабатывания, проверка сертификатов отказывает, журнал получает записи «из будущего». Особенно часто это бывает на виртуальных машинах после запуска из снимка.

Вероятные причины

По порядку: сверху то, что встречается чаще.

  1. Время было неверным при загрузке

    До синхронизации машина живёт со временем, взятым из аппаратных часов или из снимка. Службы, запущенные в этот момент, видят неверное время.

  2. Проверка сертификатов отказывает из-за времени

    Сертификат «ещё не действителен» или «уже истёк» с точки зрения неверных часов. Ошибка выглядит как проблема с сертификатом, хотя дело во времени.

  3. Календарные таймеры пересчитались

    При сдвиге времени вперёд таймер может сработать сразу или пропустить период. Монотонные таймеры от этого не страдают.

Диагностика

Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.

Время, часовой пояс и состояние синхронизации.

timedatectl status

Записи о сдвиге времени.

journalctl -b --no-pager | grep -iE "time has been changed|system clock" | head

Как пересчитались срабатывания таймеров.

systemctl list-timers --all --no-pager | head

Решение

Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.

1. Время было неверным при загрузке
Почему происходит
До синхронизации машина живёт со временем, взятым из аппаратных часов или из снимка. Службы, запущенные в этот момент, видят неверное время.
Как проверить
Посмотрите состояние синхронизации и время первых записей журнала.
timedatectl status
journalctl -b --no-pager | head -5
Как исправить
Добавьте службам, чувствительным ко времени, зависимость от готовности времени: After=time-sync.target вместе с Wants=.
2. Проверка сертификатов отказывает из-за времени
Почему происходит
Сертификат «ещё не действителен» или «уже истёк» с точки зрения неверных часов. Ошибка выглядит как проблема с сертификатом, хотя дело во времени.
Как проверить
Сравните время машины и срок сертификата.
date
echo | openssl s_client -connect узел:443 2>/dev/null | openssl x509 -noout -dates
Как исправить
Синхронизируйте время и перезапустите службу. Настройте службу синхронизации так, чтобы время было верным до запуска остальных.
3. Календарные таймеры пересчитались
Почему происходит
При сдвиге времени вперёд таймер может сработать сразу или пропустить период. Монотонные таймеры от этого не страдают.
Как проверить
Посмотрите следующие срабатывания.
systemctl list-timers --all --no-pager | head
Как исправить
Для задач, которым важен интервал, а не точное время, используйте монотонные таймеры (OnUnitActiveSec=).

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

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

systemd-timesyncd[600]: Initial clock synchronization to Mon 2026-09-15 21:12:41 MSK.
systemd[1]: Time has been changed
myapp[1200]: tls: failed to verify certificate: x509: certificate has expired or is not yet valid

Связанные ошибки

Источники

  • systemd.special(7)
    Цель time-sync.target и порядок относительно синхронизации.
    официальная документация, systemd 255
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Воспроизведено запуском тестовой машины из снимка с устаревшими часами.
    собственная проверка, systemd 255
    сверено 15 сентября 2026