1000台を超えるリモートコンピュータがあります。すべてのコンピュータで特定のコマンドを並列に実行したいと思います。私は順番に実行される次のコマンドを使用します。
for f in `cat host.lst`
do
./runScript.sh $f
done
ホストが100個あるとしますhost.lst
。runScript.sh
100個のホストで並列に実行したいです。また、ログを維持する必要があります。
コンピュータにPSSH
。
私は多くの研究をしていて、これらのリンクを見つけましたが、役に立ちませんでした。私は彼らがどのように機能するのか理解していません:
パターンに一致する複数のファイルに対して並列にコマンドを実行する
誰でもロジックを説明できますか?
ベストアンサー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
中のホストが作成されたとしますssh
。batch mode
各バックグラウンドジョブの噴出をstdout+stderr
ディレクトリ内のファイルに保存し、必要に応じて確認できます。host
$logdir
最後に、wait
内部ループの終わりにあるコマンドを介して次のグループを開始する前に、1つのグループが完了するのを待ちますfor
。