質問: if-up.dのスクリプトが3回実行されているようです。一度だけ実行したい 起動時にvpnに接続するためのスクリプトが/etc/network/if-up.dにあります。スクリプトが3回実行されているため、vpnに3回接続しているようです。起動後、sudo ifconfigを見ると、実際に3つのトンネルが作成されていることが確認されます。また、ps auxからの出力を見ると、3つすべてのopenvpnデーモンを見ることができます。一度だけ実行するようにするにはどうすればよいですか?そして、なぜそれが複数回実行されているのですか? debian7.3を実行しています。/etc/network/if-up.d/connectvpnの内容は次のとおりです。#!/bin/sh /usr/sbin/openvpn --daemon --keepalive 5 30 --config /etc/openvpn/configs/bitterroot.conf ご協力ありがとうございました!ジェフ
回答: 一般に、ifup/ifdownは、スクリプトが1回だけ実行されることを保証するものではありません。したがって、スクリプトはべき等である必要があります。つまり、既存のトンネルを確立しない独自のロジックが含まれています。もちろん、最善の方法は、トンネルがすでに存在するかどうかを実際に確認してスクリプトを開始することです。# exit if network device "tun0" exists. ip link show dev tun0 >/dev/null 2>&1 && exit 0 さらに、if-up.dなどのスクリプトは、起動されたすべてのインターフェイスに対して実行されます。ジェフが正しく観察しているように、if-*.dスクリプトは例を指定する引数を受け取りません。どのインターフェースが登場しますか。代わりに、 interfaces(5) のマニュアルページごとに: there exists for each of the above mentioned options a directory /etc/network/if-<option>.d/ [...] all of these commands have access to the following environment vari‐ ables. iface physical name of the interface being processed logical logical name of the interface being processed [... and more ...] 解決策は、正しいiface値をチェックしてスクリプトを開始することです。例:# exit if we're not starting "eth0". [ "$iface" = 'eth0' ] || exit 0 そうしないと、スクリプトはloを含むすべてのネットワークデバイスに対して実行され、その時点でトンネルを確立するには時期尚早である可能性があります。