У меня есть настольный компьютер 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
?
Ответ, по-видимому, заключается в использовании таинственного утверждения 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).