Назад | Перейти на главную страницу

systemd: когда во время загрузки создаются устройства сетевого интерфейса

Я пытаюсь создать собственную службу управления сетью для CentOS 7 образ сетевой загрузки. Служба получает список всех интерфейсов на хосте, находит тот, у которого есть физическое соединение, а затем использует его для получения конфигурации DHCP.

Проблема заключается в том, чтобы убедиться, что он запускается после того, как все сетевые устройства существуют в системе, чтобы он мог получить их список. Вот мой юнит-файл:

[Unit]
Description=Configure networking
Wants=network.target
After=network-pre.target
Before=network.target multi-user.target

[Service]
ExecStart=/usr/local/bin/netboot-cfg
Type=oneshot
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Как видите, он запускается после network-pre цель, и до network цель. Я подтвердил это с systemd-analyze plot. Однако он не может найти какие-либо интерфейсы в системе на этом этапе процесса загрузки. Список создается путем просмотра /sys/class/net каталог. В sys-subsystem-net-devices-<iface>.device модули запускаются позже, и я предполагаю, что они заполнят этот каталог.

Мне кажется странным, что блоки сетевых устройств запускаются после network.target.

Итак, возникает вопрос: как я могу надежно определить, когда все интерфейсы будут доступны, используя синтаксис файла модуля systemd?

мне кажется странным, что юниты сетевых устройств запускаются после network.target.

Итак, возникает вопрос: как я могу надежно определить, когда все интерфейсы будут доступны, используя синтаксис файла модуля systemd?

На часть этого вопроса отвечает эта ветка Unix SE.

В основном, согласно документация для network.target:

  • network.target гарантирует только то, что сетевой стек поднят:

    указывает только на то, что стек сетевого управления работает после того, как он был достигнут. Не определено, настроены ли уже какие-либо сетевые интерфейсы на момент его достижения.

  • network-online.target

    - это цель, которая активно ожидает, пока новая рабочая станция не будет «запущена», где определение «вверх» определяется программным обеспечением для управления сетью. Обычно он указывает какой-либо настроенный маршрутизируемый IP-адрес.

Поэтому вы можете изменить свои требования, чтобы отразить это: я думаю, вы можете запустить свой скрипт After=network.target, но Before=network-online.target.