を呼び出して特定のインターフェイス(例:eth0)を起動するときに、ネットワークスクリプトを実行したい
ifup eth0
スクリプトは、eth0を起動するときにのみ実行する必要があります。私のアプローチは、スクリプト(script.sh
という名前)を実行可能ファイルとしてどこかに配置してから、/etc/network/interfaces
に書き込むことでした。
auto eth0
iface eth0 inet manual
up /path/to/script.sh
それを行うためのよりエレガントな方法はありますか? /etc/network/if-up.d
スクリプト環境を何らかの方法で使用できますか?私の知る限り、allこのフォルダー内のスクリプトは、どのインターフェイスが起動されたかに関係なく実行されます。
Ifup.dのスクリプトが呼び出されると、特定のインターフェイスの構成に関連して、膨大な数の環境変数がスクリプトに渡されます。したがって、たとえば、インターフェイス構成が次のようになっている場合。
iface eth0 inet manual
dofoo on
次に、スクリプトはon
の値を持つ$IF_DOFOO
のような変数を受け取ります。
スクリプトの先頭に次のようなものを置くことができることを知っています
#!/bin/bash
if [ -z "$IF_DOFOO" ] ; then
# this script only applies to interface flagged as dofoo
exit 0
fi
... Doing the foo.
これを配置すると、そのスクリプトをif-up.dの下に簡単に配置できます。
もちろん、$IFACE
値を確認し、特定のインターフェイスに対してのみ実行するようにスクリプトをハードコーディングするか、他の外部構成ソースと照合することもできます。 if-up.d
にある他のスクリプトを見て、実行できることの例をいくつか確認してください。