SystemdDoctor
After= [Unit]

After= и Before= в systemd: порядок запуска служб

Задают порядок запуска: After= означает «запускать после того, как перечисленные unit завершат запуск», Before= — обратное. Сами по себе они не требуют, чтобы эти unit вообще запускались.

Что делает

Это самая частая путаница в systemd. Порядок и необходимость — разные вещи. After=postgresql.service не запустит базу и не помешает вашей службе стартовать, если база упала: она просто не будет стартовать раньше. Необходимость задаётся через Requires= или Wants=, и почти всегда их указывают вместе с After=.

Где ставится. В секции [Unit]. Имена перечисляются через пробел, с расширением unit.

Значения

ЗначениеЧто происходит
After=network-online.targetзапуск после готовности сети.
After=postgresql.service redis.serviceнесколько зависимостей через пробел.
Before=nginx.serviceзапускаться раньше указанного unit.

Пример

Порядок и необходимость вместе.

[Unit]
Wants=network-online.target postgresql.service
After=network-online.target postgresql.service

Wants= выражает «пусть запустится», After= — «после него». Без второй строки порядок не гарантирован даже при наличии первой.

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

After= без Requires= или Wants= не запускает зависимость и не мешает старту при её падении.

Взаимные After= у двух служб создают цикл: systemd разорвёт его, отбросив одну связь.

Имя без расширения (After=postgresql) может не найтись: пишите полное имя.

After=network.target не значит, что сеть работает: для этого есть network-online.target.

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

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

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

Источники

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