#!/usr/bin/env bash set -eu error() { echo >&2 "error: $*" exit 1 } command -v curl > /dev/null || error "curl command not found!" # Run concurrent curls which download from url to /dev/null. url="$1" # max concurrent calls max=1000 # call duration (in seconds) duration=100 # number of calls to start in batch batch=10 # time to wait before starting a new batch of calls (in seconds) delay=1 count=0 while [[ "$count" -le "$max" ]]; do echo "starting $batch new calls ($count)" for ((i = 1; i <= batch; i++)); do curl -o /dev/null -m "$duration" -s "$url" & done count=$((count + batch)) sleep "$delay" done echo "waiting for calls to finish" wait echo "done"