並列操作を制限する方法

並列操作を制限する方法

/tmp/hostlistログインするには、ユーザー名とパスワードを必要とするファイルを含むホストがあります。 Expectコマンドを使用してホストにログインし、bashスクリプトで次のようにコマンドを実行します。

)

VAR=$(expect -c "$script")

echo "$VAR" >/tmp/outexp
-----------------

並列実行を処理できます。

while IFS= read -r i
do
        ( export server_name=`echo $i`;echo "connecting to $i";expect -c 
wait

制限する方法はありますか?一度に何人のホストがありますか?たとえば、ファイルに1000個のホストがあり、1000個のホストを完了するために一度に100個のホストセットで実行したいとします。

ベストアンサー1

GNU Parallelを使用すると、次のことができます。

[compute $script]
export script
run_one() {
  i="$1"
  export server_name=`echo $i`
  echo "connecting to $i"
  expect -c "$script"
  echo "Job completed on $i"
  echo "-----------------------------------"
}
export -f run_one

cat "$file" | parallel -j100 run_one '2>&1' >"$log2"

または:

[compute $script]
export script

cat "$file" |
  parallel -j100 --tag 'i={} expect -c "$script" 2>&1' >"$log2"

おすすめ記事