Служба systemd в Ubuntu 16.04 ожидает завершения работы dhclient при использовании etc / network / interfaces

У меня есть настольный компьютер 16.04, который подключается к Интернету через WiFi. Для удобства удаленного управления wlan0 настраивается через /etc/network/interfaces вместо сетевого менеджера.

У меня есть служба systemd, которая может запускаться при загрузке. Этот сервис настроен на запуск после default.target следующим образом:

[Unit]
After=default.target

[Service]
Type=simple
ExecStart=/usr/bin/node main.js"
Restart=always

[Install]
WantedBy=default.target

Этот сервис запускается немедленно, если я загружаю устройство в зоне действия его сети Wi-Fi, потому что dhclient немедленно получает IP. Но если я загружаю свою систему там, где она не может подключиться к Wi-Fi, мой сервис бездействует и ждет, пока dhclient сдастся, прежде чем начать работу. Эта служба ожидает ровно 300 секунд, указанных в разделе /etc/dhclient/dhclient.conf timeout 300.

Мое понимание After=default.target заключалось в том, что он НЕ будет ждать в сети. After=network.target является инструментом для этого. Если я настраиваю свой Wi-Fi с помощью Network Manager вместо /etc/network/interfaces, служба запускается немедленно, независимо от доступности сети.

Как я могу запустить свой сервис независимо от статуса dhclient при использовании /etc/network/interfaces?

1
задан 4 January 2018 в 00:04

1 ответ

Ответ, по-видимому, заключается в использовании таинственного утверждения allow-hotplug в /etc/network/interfaces, как я узнал из https://askubuntu.com/a/868445/358498 :

allow-hotplug wlan0
iface wlan0 inet dhcp
...

systemd больше не ожидает в сети запуска службы, которая зависит от default.target. Почему allow-hotplug делает такую ​​разницу, мне немного непонятно, поскольку в моей системе не происходит настоящего события «горячей замены». Один ресурс говорит:

Существует не так много документации о том, что на самом деле делает allow-hotplug. man interfaces (довольно хорошая man-страница, BTW) подразумевает, что ifup откажется вызывать интерфейс, если не установлен параметр allow-hotplug; но если сеть запускается с помощью /etc/init.d/networking start в любом случае, почему происходят разные вещи в зависимости от наличия allow-hotplug? Это все очень запутанно, но поверьте мне на слово, вам нужен allow-hotplug, если вы используете PCMCIA или Cardbus (или, возможно, USB).

1
ответ дан 4 January 2018 в 00:04

Другие вопросы по тегам:

Похожие вопросы: