私の問題はUSBテザリングとネットワークインターフェースに関連しています。
を実行すると、通常、ifconfig -a
ループバック、WiFi、イーサネットの3つのインターフェイスが表示されます。 NETでは、それぞれのゲートウェイ、ネットマスク、およびブロードキャストを定義しました/etc/networking/interfaces
。
時には、USBテザリングのために携帯電話をコンピュータに接続して実行すると、名前が異なるifconfig -a
1つのインターフェースが表示されることがありますenp0s20u2
。このインターフェイスは、携帯電話が接続されていてUSBテザリングが有効になっている場合にのみ表示されます。そのインターフェースを呼び出すために、次の行を追加しました/etc/networking/interfaces
。
# For USB tethering
auto enp0s20u2
iface enp0s20u2 inet dhcp
address 192.168.42.56
gateway 192.168.42.1
netmask 255.255.255.0
broadcast 192.168.42.255
これにより、携帯電話を接続するとインターフェイスが自動的に表示され、設定されます。
質問つまり、電話が接続されていない場合、systemd サービスを開始できません。enp0s20u2
ほとんどの場合、インターフェイスが不明なため、systemctl
起動時や手動で実行すると起動できませんsystemctl restart networking
。
このインターフェイス設定がサービスの起動に失敗するのを防ぐ方法はありますか?
答え1
ディレクティブを置き換えると、この問題はエレガントに解決されますauto
。allow-hotplug
インターフェイスはifup -a
サービスによって開始されなくなりますが、接続または起動時に検出されると開始されますsystemd
networking
。udev
# For USB tethering
allow-hotplug enp0s20u2
iface enp0s20u2 inet dhcp
address 192.168.42.56
gateway 192.168.42.1
netmask 255.255.255.0
broadcast 192.168.42.255
からman 5 interfaces
:
「allow-」で始まる行は、そのサブシステムで自動的に起動する必要があるインターフェイスを識別します。これは、「allow-hotplug」行にリストされている場合にeth0またはeth1のみを表示する「ifup --allow = hotplug eth0 eth1」などのコマンドを使用して実行できます。 「allow-auto」と「auto」は同義語です。 (「allow-hotplug」と表示されたインターフェイスは、udevがそれを検出すると起動します。)インターフェイスがすでに存在する場合は、起動中に起動したり、後でUSBネットワークカードを接続したりすることができます。ありません)。