1

Linux ホストのネットワーク アドレスを変更する簡単な Bash スクリプトを作成しました。

#!/bin/sh
REMOTE_HOST=192.168.2.127   # Default Host address
NEW_IP=192.168.30.33        # New IP I want to set
NEW_GW=192.168.30.1         # New Gateway I want to set

sudo ifconfig eth0 192.168.2.1     # Moving to the right network...
#ping $REMOTE_HOST -c 3            # I can correctly ping the host here...

ssh-copy-id root@${REMOTE_HOST} > /dev/null   # ...for my comfort...

# Setting the network with new values for the IP addr and the GW...
COMMAND="sed -i 's@address *\\([0-9.]\\+\\)@address ${NEW_IP}@' /etc/network/interfaces\
      && sed -i 's@gateway *\\([0-9.]\\+\\)@gateway ${NEW_GW}@' /etc/network/interfaces"

ssh root@${REMOTE_HOST} $COMMAND
# done!

# Now restart the network services:
ssh root@${REMOTE_HOST} "/etc/init.d/networking restart &" &   # (Note the 2nd '&' !!!)

# Come back to my old IP
sudo ifconfig eth0 192.168.30.10
sudo route add default gw 192.168.30.1

このスクリプトはほぼ完全に機能しますが、次のようになります。

1)ホームフォルダーから実行しても問題ありません。NFS 共有フォルダーからスクリプトを実行すると、スクリプトが 1 ~ 2 分間ハングしてから正しく終了します

2) ホストでネットワークを再起動するときに 2 番目の「&」を省略すると、コマンドが返されません...

質問は次のとおりです。

1) 長い待ち時間の原因 (NFS、別の IP アドレス、別のゲートウェイ)? そして、それを回避することは可能ですか?

2) なぜそれが起こるのですか? どうすれば回避できますか?

助けてくれてありがとう、そして私の下手な英語でごめんなさい!

4

1 に答える 1

0

ネットワーク サービスを再起動すると、アクティブな接続がすべて切断されます。

Bash は、実行中のファイルを 1 行ずつ読み取ります。NFS はネットワーク ファイル システムであるため、これによりファイルへの接続が終了します。networking restartしたがって、システムは、接続が再確立されるまで、後で行を実行して待機します (実際にはできません) 。

代わりに、最初にスクリプト全体のローカル コピーを作成してから、ローカルで実行する必要があります。そのためのスクリプトをコーディングすることもできます;-)

于 2012-08-30T13:40:18.387 に答える