SystemdDoctor
мешает работе таймеры время

Таймер срабатывает позже указанного времени

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

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

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

  1. Действует окно точности по умолчанию

    Срабатывание сдвигается в пределах окна, чтобы совпасть с другими пробуждениями. Задание на 03:00 может пойти в 03:00:47.

  2. Добавлена случайная задержка

    Случайная задержка разносит одинаковые задания по времени. Она складывается с окном точности, и разброс становится заметным.

  3. Момент считается от другого события

    Таймеры по времени работы считают от загрузки или от прошлого запуска службы. Ожидание точного календарного момента к ним неприменимо.

Диагностика

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

Когда таймеры срабатывали и когда сработают.

systemctl list-timers --all --no-pager

Окно точности и случайная задержка.

systemctl show mytask.timer -p AccuracySec -p RandomizedDelaySec

Фактическое время запусков за неделю.

journalctl -u mytask.service --since "7 days ago" --no-pager | grep -i Started

Решение

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

1. Действует окно точности по умолчанию
Почему происходит
Срабатывание сдвигается в пределах окна, чтобы совпасть с другими пробуждениями. Задание на 03:00 может пойти в 03:00:47.
Как проверить
Посмотрите окно точности и фактическое время срабатываний.
systemctl show mytask.timer -p AccuracySec -p RandomizedDelaySec
journalctl -u mytask.service --since "3 days ago" --no-pager | grep -i Started
Как исправить
Сузьте окно точности до секунды, если момент важен. Для остальных заданий окно по умолчанию полезно: оно экономит пробуждения.
[Timer]
OnCalendar=*-*-* 03:00:00
AccuracySec=1s
2. Добавлена случайная задержка
Почему происходит
Случайная задержка разносит одинаковые задания по времени. Она складывается с окном точности, и разброс становится заметным.
Как проверить
Посмотрите обе настройки.
systemctl show mytask.timer -p RandomizedDelaySec -p AccuracySec
systemctl list-timers mytask.timer --no-pager
Как исправить
Уберите случайную задержку там, где нужен точный момент. Для массовых заданий на многих машинах она, наоборот, полезна: снимает одновременную нагрузку.
3. Момент считается от другого события
Почему происходит
Таймеры по времени работы считают от загрузки или от прошлого запуска службы. Ожидание точного календарного момента к ним неприменимо.
Как проверить
Посмотрите, как задан момент срабатывания.
systemctl cat mytask.timer | grep -E "^On"
Как исправить
Выберите нужный вид: календарный момент задаётся одним параметром, отсчёт от события — другими. Смешивать их в одном таймере можно, но поведение станет неочевидным.

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

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

$ systemctl show mytask.timer -p AccuracySec -p RandomizedDelaySec
AccuracySec=1min
RandomizedDelaySec=0
systemd[1]: Started mytask.service - Nightly task.
# в журнале за три дня:
# Sat 03:00:47 Started mytask.service
# Sun 03:00:12 Started mytask.service
# Mon 03:00:39 Started mytask.service

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

Источники

  • systemd.timer(5)
    AccuracySec=, RandomizedDelaySec= и группировка пробуждений.
    официальная документация, systemd 255
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Проверено на systemd 255: без сужения окна срабатывания расходятся в пределах минуты.
    собственная проверка, systemd 255
    сверено 15 сентября 2026