0

RSH を使用してスクリプトをリモートで開始すると、ポートが不足するという問題があります。

すべてのサーバーにプッシュされている、実行する必要があるスクリプトがあります。サーバーのリストがあります (hostfilelist)

基本的に、それらを並列で実行する単純なループがあります。

for host in `cat hostfilelist`; do
rsh $host ksh script.ksh &
done

問題は、2,000 台のサーバーがあり、512 の制限に達していることです (私が読んだドキュメントに基づいて、RSH のポート範囲が 512-1023 であると仮定します)。

どうすればこれを回避できますか?

4

1 に答える 1

0

コードを使用すると、rsh の「セキュアな」ポート制限に遭遇するだけでなく、ファイル記述子の制限に達する可能性もあります ( で確認してくださいulimit -n)。各ネットワーク接続もファイル記述子を消費します。

コードで行っていることは、hostfilelist を調べて、ホストごとに (ソース サーバー上で) アンパサンドを使用してバックグラウンドで実行される rsh コマンドを実行することです。これらの各接続は、リモート ホスト上のスクリプトが終了するまで、バックグラウンドで開いたままになります。

この状況では、スクリプトの実行を各リモート ホストのバックグラウンドで実行する方がはるかに優れているため、リモート ジョブの開始直後に rsh コマンドが返され、ネットワーク接続 (およびポート) が再び解放されます。これを行うには、コードの 2 行目を次のように書き換えます。

rsh $host "ksh script.ksh &"

ただし、状況が速すぎると、ポートの再利用に関する問題が発生する可能性があります (netstat 出力の TIME_WAIT ステータスを参照)。

そして、rsh を手放し、代わりに ssh を使用することを強くお勧めします。

于 2012-10-05T20:11:58.153 に答える