I ' m пытается создать настраиваемую службу управления сетью для образа сетевой загрузки 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-analysis
. Однако он не может найти какие-либо интерфейсы в системе на этом этапе процесса загрузки. Список создается путем просмотра каталога / sys / class / net
. Файл sys-subsystem-net-devices-
запускаются позже, и я предполагаю, что они заполняют этот каталог.
Мне кажется странным, что блоки сетевых устройств начинаются после network.target
.
Итак, вопрос: как я могу надежно определить, когда все интерфейсы будут доступны, используя синтаксис файла systemd unit?
Мне кажется странным, что сетевые устройства начинают работать после network.target.
Итак, вопрос в том, как я могу надёжно определить, когда все интерфейсы будут доступны, используя синтаксис файловых файлов системных устройств?
На часть этого вопроса отвечает этот поток Unix SE.
В основном, согласно документации для network.target:
network.target гарантирует только то, что сетевой стек поднят:
указывает только на то, что стек сетевого управления поднят после его достижения. Не определено, настроены ли уже какие-либо сетевые интерфейсы при достижении.
network-online.target
- это мишень, которая активно ждет, пока ньюорк не "поднимется", где определение "поднимется" определяется программным обеспечением сетевого управления. Обычно это указывает на какой-то настроенный, маршрутизируемый IP-адрес.
Так что, возможно, вы захотите скорректировать свои требования, чтобы отразить это: Я думаю, что вы захотите запустить ваш скрипт After=network.target
, но Before=network-online.target
.