web-dev-qa-db-ja.com

特定のインターフェースに対して特定の/etc/network/if-up.d-scriptのみを実行します

を呼び出して特定のインターフェイス(例: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このフォルダー内のスクリプトは、どのインターフェイスが起動されたかに関係なく実行されます。

2
fragwürdig

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にある他のスクリプトを見て、実行できることの例をいくつか確認してください。

4
Zoredache