SystemdDoctor
служба не работает конфигурация таймауты

Промежутки времени в unit-файле разбираются не так

Параметры времени принимают число с единицей: 30s, 5min, 2h. Без единицы число читается как секунды — поэтому RestartSec=100 это сто секунд, а не сто миллисекунд, как многие думают.

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

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

  1. Единица не указана

    Число без единицы — секунды. Ожидание миллисекунд приводит к паузам в сотни раз больше задуманного.

  2. Недопустимая запись единицы

    Допустимы us, ms, s, min, h, d, w и словесные варианты. Записи вроде 30 seconds. или 1,5min не разбираются.

  3. Ноль вместо бесконечности

    У таймаутов ноль означает отключение ограничения, а не мгновенное истечение. Читается это неочевидно и часто понимается наоборот.

Диагностика

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

Все промежутки времени в микросекундах: видно фактические значения.

systemctl show myapp.service | grep -i USec

Неразбираемые записи времени.

systemd-analyze verify /etc/systemd/system/myapp.service

Решение

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

1. Единица не указана
Почему происходит
Число без единицы — секунды. Ожидание миллисекунд приводит к паузам в сотни раз больше задуманного.
Как проверить
Посмотрите действующие значения: systemd печатает их в микросекундах.
systemctl show myapp.service | grep -iE "Sec=|USec="
Как исправить
Указывайте единицу всегда: RestartSec=100ms или RestartSec=5s. Так файл читается однозначно.
2. Недопустимая запись единицы
Почему происходит
Допустимы us, ms, s, min, h, d, w и словесные варианты. Записи вроде 30 seconds. или 1,5min не разбираются.
Как проверить
Проверьте файл статической проверкой.
systemd-analyze verify /etc/systemd/system/myapp.service
Как исправить
Исправьте по сообщению проверки. Составные записи допустимы: 1min 30s.
3. Ноль вместо бесконечности
Почему происходит
У таймаутов ноль означает отключение ограничения, а не мгновенное истечение. Читается это неочевидно и часто понимается наоборот.
Как проверить
Поищите нулевые значения.
systemctl show myapp.service | grep -E "USec=0$|Sec=0$"
Как исправить
Пишите infinity, если ограничение не нужно: смысл будет понятен любому, кто откроет файл.

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

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

$ systemctl cat myapp.service | grep RestartSec
RestartSec=100

$ systemctl show myapp.service -p RestartUSec
RestartUSec=1min 40s

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

Источники

  • systemd.time(7)
    Форматы промежутков времени и допустимые единицы.
    официальная документация, systemd 255
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Проверено: RestartSec=100 даёт паузу в сто секунд.
    собственная проверка, systemd 255
    сверено 15 сентября 2026