シェルスクリプトを使用して複数のサーバーで並列にコマンドを実行する

シェルスクリプトを使用して複数のサーバーで並列にコマンドを実行する

1000台を超えるリモートコンピュータがあります。すべてのコンピュータで特定のコマンドを並列に実行したいと思います。私は順番に実行される次のコマンドを使用します。

for f in `cat host.lst`
do
       ./runScript.sh $f
done

ホストが100個あるとしますhost.lstrunScript.sh100個のホストで並列に実行したいです。また、ログを維持する必要があります。

コンピュータにPSSH

私は多くの研究をしていて、これらのリンクを見つけましたが、役に立ちませんでした。私は彼らがどのように機能するのか理解していません:

多くのサーバーでSSHを介したコマンド実行の自動化

パターンに一致する複数のファイルに対して並列にコマンドを実行する

誰でもロジックを説明できますか?

ベストアンサー1

logdir=`mktemp -d`
bunch=200

IFS=$'\n'
for hosts in $(< hosts.lst xargs -r -L "$bunch"); do
   IFS=" ";
   for host in $hosts; do
      ssh -n -o BatchMode=yes "$host" './runScript.sh' 1>"$logdir/$host.log" 2>&1 &
   done
   wait
done

ファイルの1行/行に1000(数千)のホストがリストされていると仮定し、hosts.lst一度にこれらのホストグループ(200)を選択し、対応する200のホストのそれぞれで使用runScript.sh中のホストが作成されたとしますsshbatch mode各バックグラウンドジョブの噴出をstdout+stderrディレクトリ内のファイルに保存し、必要に応じて確認できます。host$logdir

最後に、wait内部ループの終わりにあるコマンドを介して次のグループを開始する前に、1つのグループが完了するのを待ちますfor

おすすめ記事