web-dev-qa-db-ja.com

起動時に/ etc / network / interfacesのポストアップコマンドが複数回実行されるのはなぜですか?

/etc/network/interfacesの内容は次のとおりです:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

post-up /etc/network/if-up.d/sshstart

そしてsshstartは次のようなスクリプトです:

curl something something darkside send a file over ftps in the background &
/usr/bin/autossh -M 0 -f -N -o ServerAliveInterval=15 -o ServerAliveCountMax=3 -R 127.0.0.1:2005:127.0.0.1:22 -R 192.168.1.10:2006:192.168.2.110:1912 -L 127.0.0.1:5249:192.168.1.212:5249 [email protected] -p 8080

マシンが再起動すると、curlコマンドが複数回実行され、ファイルがFTPサーバーで2〜3回終了します。プロセスを見ると、autosshの複数のインスタンスが実行されているようです...これがautosshの処理方法かどうかはわかりませんが、curlがファイルを複数回アップロードしないようにする必要があります。

私の直感は、sshstartスクリプト全体が複数回実行されることですが、理由がわかりません。

起動時にネットワークセットアッププロセスの詳細を検索してみましたが、見つけることができたのは、インターフェースファイルの構文情報だけでした。

誰かが助けてくれますか?

ありがとうございました。

---編集---

以下のように、インターフェースファイルを次のように変更しました(ポストアップの上の空の行を削除しました):

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp
post-up /etc/network/if-up.d/sshstart

そして、sshstartに次の行を追加しました:

echo $(date)>>/run/shm/sshstart.log

再起動後の/run/shm/sshstart.logの内容は次のとおりです。

Wed Oct 29 08:07:00 EDT 2014
Wed Oct 29 08:07:07 EDT 2014
Wed Oct 29 08:07:07 EDT 2014
Wed Oct 29 08:07:07 EDT 2014

したがって、4回実行されました:(どうなっているのですか?

10
TCZ8

/etc/network/if-up.d内のファイルalreadyインターフェイス(任意のインターフェイス)が起動するたびに自動的に実行されます。明示的なpost-upコマンドで同じスクリプトを再度実行するように指定すると、スクリプトのみが再度実行されます。だから私の推測はこれが起こるべきことです:

  • IFACE=loにあるため、loが(環境変数/etc/network/if-up.dを使用して)起動すると1回実行されます。
  • 同じ理由で、eth0が(環境変数IFACE=eth0を使用して)起動すると、1回実行されます。
  • eth0ディレクティブでこれを要求したため、post-upが(環境変数IFACE unsetで)表示されたときに再び実行されます。

4回目はどこから来たのかわかりませんが、とにかく3回目です。

スクリプトを別の場所に配置し、post-upディレクティブを使用して一度実行するか、post-upディレクティブでスクリプトを記述せずに$IFACEの値を確認して、目的のインターフェイスでない限り何もしないようにする必要があります( eth0)が登場しました。

13
Celada

Celadaによると、/etc/network/if-up.dスクリプトは、インターフェイスごとに実行されます。ルールの重複を回避するには、次を追加します。

[ "$IFACE" = "eth0" ] || exit 0

スクリプトの上部。これにより、インターフェースが必要なものでない場合、スクリプトはすぐに終了します。

3
ppparadox

post-up-コマンドの前の空行を削除します。これは、post-upコマンドをeth0のみに関連付ける必要があります。さらに、if-up.dフォルダーからスクリプトを移動します。そのフォルダー内のスクリプトは、post-upとして定義されているかどうかに関係なく、自動的に実行されます。あなたの場合、それはあなたのpost-upコマンドに追加で実行されます。

1
xx4h