SystemdDoctor
TimeoutStartSec= [Service]

TimeoutStartSec=: сколько systemd ждёт запуска службы

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

Что делает

Что именно считается «запущенной», зависит от Type=. Для simple это почти мгновенно, для forking — завершение исходного процесса, для notify — уведомление от программы. Поэтому таймаут запуска и тип надо рассматривать вместе: чаще всего таймаут истекает не потому, что служба медленная, а потому что тип выбран неверно.

Значение infinity снимает ограничение. Это допустимо для служб, где время восстановления непредсказуемо (большие базы), но тогда подвисший запуск будет держать задание вечно и блокировать зависимые службы.

Где ставится. В секции [Service]. Параметр TimeoutSec= задаёт сразу и запуск, и остановку.

Значения

ЗначениеЧто происходит
90sзначение по умолчанию в большинстве дистрибутивов.
10minдля баз данных с восстановлением по журналу транзакций.
infinityограничение снято; применять осознанно.
0читается неочевидно: означает отключение ограничения. Лучше писать infinity.

По умолчанию: обычно 90s, задаётся DefaultTimeoutStartSec= в system.conf

Пример

Увеличенный таймаут для медленно стартующей службы.

[Service]
Type=notify
TimeoutStartSec=10min
ExecStart=/usr/lib/postgresql/16/bin/postgres -D /var/lib/postgresql/16/main

Для базы это оправданно: восстановление после аварийного завершения занимает минуты, а обрыв на середине только удлиняет следующую попытку.

Типичные ошибки

Таймаут при Type=notify почти всегда означает, что программа не умеет отчитываться о готовности, а не что она медленная.

Значение 0 часто понимают как «без ожидания», хотя оно отключает ограничение. Пишите infinity.

Предварительные команды (ExecStartPre=) входят в этот же таймаут.

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

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

  • Failed with result 'timeout'Состояние timeout: служба не уложилась в отведённое время при запуске, остановке или перезагрузке настроек.
  • Job for … failed because a timeout was exceededЗадание на запуск прервано по таймауту. Как отличить медленный старт от заблокированного и правильно настроить TimeoutStartSec.
  • Failed with result 'protocol'Состояние protocol: служба нарушила договор со systemd. Обычно Type=notify без уведомления или Type=dbus без имени на шине.

Рядом стоящие параметры

Где важен на практике

Источники

  • systemd.service(5) официальная документация
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04) собственная проверка
    сверено 15 сентября 2026