Bashで反復しながら停止する方法

Bashで反復しながら停止する方法
target=${1:-http://web1.com}
while true 
do
    for i in $(seq 10)
    do
    curl $target > /dev/null & 
done

    wait

done

私はプログラミング、特にbashの初心者です。一度に 10 個の HTTP リクエストを生成して HTTP 負荷分散をトレーニングしたいと思います。 15000に達すると、要求の送信を停止します。

コードはどのように書くのですか?ありがとう

答え1

達成する目標がcurl合計15,000回の呼び出しである場合は、外部ループを1,500回実行するだけです。

内部ループを10回実行するのと同様に、外部ループを1500回実行するとこれを達成できます。

target=${1:-http://web1.com}
j=0

while [ "$j" -lt 1500 ]; do

    for i in {0..9}; do
        curl "$target" >/dev/null &
    done

    wait

    j=$(( j + 1 ))
done

あるいは、コールの総数を計算して、外部ループを調整することなく、curl内部ループの実行数を変更しながらも、curl同じコールの総数を維持することができます。

target=${1:-http://web1.com}
n=15000

while [ "$n" -gt 0 ]; do

    for i in {0..9}; do
        curl "$target" >/dev/null &
        n=$(( n - 1 ))
    done

    wait

done

テスト[ "$n" -gt 0 ]本物厳密にゼロより大きい限りn

または、n内部ループ内の縮小を防ぐには、次の手順を実行します。

target=${1:-http://web1.com}
n=15000

while [ "$n" -gt 0 ]; do

    for i in {0..9}; do
        curl "$target" >/dev/null &
    done
    n=$(( n - 10 ))

    wait

done

xargsまたは、並列に実行できるユーティリティがあり、-P10個のプロセスを継続的に実行しようとしますcurl

target=${1:-http://web1.com}
n=15000

yes | head -n "$n" | xargs -I {} -P 10 curl "$target" >/dev/null

これはyes15000行を使用して生成し、すべての行が使い果たされるまで常に10個のプロセスを実行するコマンドheadに供給します(読み取った各行に1つのプロセスが作成されます)。結果行の実際の内容は単一文字ですが、削除され、まったく使用されません。xargscurlcurlheadyesy

関連情報