Я пытаюсь создать собственную службу управления сетью для 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
.