web-dev-qa-db-fra.com

Le service Ubuntu 16.04 systemd attend que dhclient se termine lorsque vous utilisez etc / network / interfaces

J'ai un boîtier 16.04 Desktop qui se connecte à Internet via WiFi. Pour faciliter la gestion à distance, wlan0 est configuré via /etc/network/interfaces à la place du gestionnaire de réseau.

J'ai un service systemd qui est activé pour démarrer au démarrage. Ce service est configuré pour démarrer après default.target comme suit:

[Unit]
After=default.target

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

[Install]
WantedBy=default.target

Ce service démarre immédiatement si je démarre la boîte à portée de son réseau wifi, car dhclient reçoit immédiatement une adresse IP. Mais si je démarre mon système là où il ne peut pas utiliser le wifi, mon service reste en place et attend que le client d'abandonner le système avant de commencer. Ce service attend précisément les 300 secondes spécifiées dans la strophe /etc/dhclient/dhclient.conftimeout 300.

Ma compréhension de After=default.target était que cela allait PAS attendre sur le réseau. After=network.target est l'outil pour le faire. Si je configure mon réseau wifi avec Network Manager au lieu de /etc/network/interfaces, le service démarre immédiatement, quelle que soit la disponibilité du réseau.

Comment faire démarrer mon service quel que soit le statut de dhclient tout en utilisant /etc/network/interfaces?

1
tyleha

La réponse, semble-t-il, consiste à utiliser la mystérieuse déclaration allow-hotplug dans /etc/network/interfaces comme je l'ai appris de https://askubuntu.com/a/868445/358498 :

allow-hotplug wlan0
iface wlan0 inet dhcp
...

systemd n'attend plus du réseau pour lancer un service dépendant de default.target. Pourquoi allow-hotplug fait une telle différence me semble un peu confus, car il n’ya pas de véritable événement "hotplug" dans mon système. ne ressource dit:

Il n'y a pas beaucoup de documentation sur ce que permet réellement-hotplug. man interfaces (une page de manuel assez bonne, BTW) implique que ifup refusera de faire apparaître une interface sauf si allow-hotplug est défini; mais si le réseau est démarré via /etc/init.d/networking dans un sens ou dans l'autre, pourquoi différentes choses se produisent-elles selon que allow-hotplug est présent ou non? Tout cela est très déroutant, mais croyez-moi, vous avez besoin de allow-hotplug si vous utilisez PCMCIA ou Cardbus (ou probablement USB).

1
tyleha