SystemdDoctor

Служба стартует до готовности сети: network.target вместо network-online.target

Цель network.target пассивная: её достижение означает лишь, что управление сетью запущено, а не что адрес получен. Дождаться настроенной сети позволяет другая цель — network-online.target, и она устроена наоборот: её подтягивает тот, кому сеть нужна, а вместе с ней подтягивается служба ожидания. Плата за это — время загрузки, поэтому ожидание уместно там, где программа сама не умеет пережить отсутствие сети.

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

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

  1. В описании указан только порядок относительно network.target

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

  2. Цель указана, а служба ожидания выключена

    Целью готовой сети занимается служба ожидания того, кто управляет сетью. Если она не включена, цель достигается мгновенно и ожидание превращается в видимость.

  3. Ожидание упирается в предел времени и задерживает загрузку

    Ожидание по умолчанию ждёт все известные ему линки и не меньше двух минут. Один лишний интерфейс без настроек — и загрузка удлиняется на эти две минуты, а состояние системы становится ухудшенным.

  4. Сеть готова, а имена ещё не разрешаются

    Готовность сети ничего не говорит о работе разрешения имён: для него есть отдельная точка встречи, nss-lookup.target, и её полагается указывать в порядке, но не подтягивать.

Диагностика

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

Есть ли у службы ожидание сети и чем оно задано — подтягиванием или только порядком.

systemctl show ИМЯ.service -p Wants -p After -p Requires

Включена ли служба ожидания: без неё цель готовой сети ничего не ждёт.

systemctl is-enabled systemd-networkd-wait-online.service NetworkManager-wait-online.service

Сколько времени загрузка простояла в ожидании сети.

systemd-analyze blame | grep -i wait-online

Дождалась служба ожидания сети или вышла по пределу времени.

journalctl -b -u systemd-networkd-wait-online --no-pager

Решение

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

1. В описании указан только порядок относительно network.target
Почему происходит
Пассивная цель достигается почти сразу и ничего не обещает: адреса ещё нет, маршрута тоже. Программа, привязывающаяся к конкретному адресу, в этот момент получает отказ.
Как проверить
Посмотрите зависимости службы.
systemctl show ИМЯ.service -p After -p Wants -p Requires | tr ' ' '\n' | grep -i network
Как исправить
Добавьте в переопределении и подтягивание, и порядок относительно цели готовой сети: одного порядка мало, без Wants= цель никто не поднимет.
[Unit]
Wants=network-online.target
After=network-online.target
2. Цель указана, а служба ожидания выключена
Почему происходит
Целью готовой сети занимается служба ожидания того, кто управляет сетью. Если она не включена, цель достигается мгновенно и ожидание превращается в видимость.
Как проверить
Посмотрите, включена ли служба ожидания у вашего управляющего сетью.
systemctl is-enabled systemd-networkd-wait-online.service NetworkManager-wait-online.service 2>&1
Как исправить
Включите ту службу ожидания, которая соответствует управляющему сетью на этой машине. Включать обе разом не надо: неработающая добавит к загрузке своё время ожидания впустую.
3. Ожидание упирается в предел времени и задерживает загрузку
Почему происходит
Ожидание по умолчанию ждёт все известные ему линки и не меньше двух минут. Один лишний интерфейс без настроек — и загрузка удлиняется на эти две минуты, а состояние системы становится ухудшенным.
Как проверить
Посмотрите, сколько загрузка ждала сеть и чем кончилось ожидание.
systemd-analyze blame 2>/dev/null | grep -i wait-online
journalctl -b -u systemd-networkd-wait-online --no-pager | tail -5
Как исправить
Ограничьте ожидание нужным интерфейсом параметром --interface= в переопределении службы ожидания или уберите лишний линк из управления. Просто выключить ожидание — значит вернуть исходную беду.
4. Сеть готова, а имена ещё не разрешаются
Почему происходит
Готовность сети ничего не говорит о работе разрешения имён: для него есть отдельная точка встречи, nss-lookup.target, и её полагается указывать в порядке, но не подтягивать.
Как проверить
Посмотрите, на чём именно спотыкается программа при запуске.
journalctl -b -u ИМЯ.service --no-pager | head -20
systemctl show ИМЯ.service -p After | tr ' ' '\n' | grep -i nss
Как исправить
Добавьте порядок относительно точки встречи разрешения имён и научите программу повторять попытку: разрешение имён может отвалиться и после загрузки, а зависимостями это не лечится.

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

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

systemd[1]: Starting myapp.service - My application...
myapp[911]: bind 203.0.113.10:8080: Cannot assign requested address
systemd[1]: myapp.service: Main process exited, code=exited, status=1/FAILURE

systemd-networkd-wait-online[688]: Timeout occurred while waiting for network connectivity.
systemd[1]: systemd-networkd-wait-online.service: Main process exited, code=exited, status=1/FAILURE
systemd[1]: Failed to start systemd-networkd-wait-online.service - Wait for Network to be Configured.

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

Источники

  • systemd.special(7)
    network.target — пассивная цель, network-online.target подтягивается потребителем и тянет за собой службу ожидания; nss-lookup.target — точка встречи для разрешения имён.
    официальная документация, systemd 255
    сверено 15 сентября 2026
  • systemd-networkd-wait-online.service(8)
    Ожидание ждёт все управляемые линки и хотя бы один в состоянии «online»; предел времени по умолчанию 120 секунд.
    официальная документация, systemd 255
    сверено 15 сентября 2026
  • Проверено на этой машине: systemd 255 (255.4-1ubuntu8.17), Ubuntu 24.04
    На этой машине включена systemd-networkd-wait-online.service; строка «Timeout occurred while waiting for network connectivity.» взята из самого исполняемого файла ожидания, а предел в 120 секунд — из его man-страницы.
    собственная проверка, systemd 255
    сверено 21 сентября 2026