RandomizedDelaySec= и AccuracySec= в таймерах
RandomizedDelaySec= добавляет к времени срабатывания случайную задержку в заданных пределах. AccuracySec= разрешает systemd сдвигать срабатывание для группировки пробуждений.
Что делает
Разброс нужен, когда одинаковая задача стоит на многих машинах: без него все они обращаются к серверу обновлений или к хранилищу резервных копий в одну и ту же секунду. Именно поэтому дистрибутивные таймеры обновлений всегда используют этот параметр.
Точность работает иначе: systemd объединяет близкие пробуждения, чтобы реже будить процессор. Значение по умолчанию — минута; для задач, которым важна точность до секунды, его нужно уменьшать явно.
Где ставится. В секции [Timer].
Значения
| Значение | Что происходит |
|---|---|
RandomizedDelaySec=30min | случайная задержка до получаса. |
AccuracySec=1us | максимальная точность; чаще будит процессор. |
AccuracySec=1h | широкое окно: systemd выберет удобный момент. |
FixedRandomDelay=true | задержка постоянна для машины: полезно для предсказуемости. |
По умолчанию: разброс 0, точность 1min
Пример
Обновление на парке машин без одновременного наплыва.
[Timer]
OnCalendar=daily
RandomizedDelaySec=2h
FixedRandomDelay=true
Persistent=true
С постоянной задержкой каждая машина каждый день обращается в своё время — это удобнее для разбора, чем полностью случайный момент.
Типичные ошибки
Без разброса одинаковые таймеры на многих машинах создают пик нагрузки.
Точность по умолчанию в минуту неожиданна для задач, которым нужна точность до секунды.
Разброс складывается с расписанием: фактическое время может выйти за ожидаемое окно.
Связанные ошибки
- Пропущенное срабатывание таймера: Persistent и выключенная машинаТаймер не выполнил задачу, потому что в момент срабатывания машина была выключена или служба была недоступна. Как работает Persistent=true.
- Таймер активен, но не срабатываетТаймер systemd в состоянии active, но служба не запускается. Разбор: нет условия срабатывания, таймер не включён, ошибка в OnCalendar.
Рядом стоящие параметры
Где важен на практике
Источники
- systemd.timer(5)
- Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)