Когда нужно запустить 1000 задач, но не обрушить сервер - важно уметь распараллеливать выполнение с ограничением на количество одновременных процессов. В bash это можно реализовать без внешних утилит вроде parallel.
🌟 Задача: скачать список URL-ов, но не больше N одновременно.
🛠 Пример скрипта:
#!/bin/bash
MAX_JOBS=5
URLS_FILE="urls.txt"
semaphore() {
while (( $(jobs -rp | wc -l) >= MAX_JOBS )); do
sleep 0.5
done
}
process_url() {
local url="$1"
echo "[*] Загрузка $url"
curl -s -o /dev/null "$url" && echo "[+] $url OK" || echo "[-] $url FAIL"
}
while read -r url; do
semaphore
process_url "$url" &
done < "$URLS_FILE"
wait
echo "Все задачи завершены"
▪️ Пояснения:
jobs -rp - выводит только PID активных фоновых задач.semaphore() - блокирует запуск, если уже выполняется $MAX_JOBS процессов.wait в конце - ждет завершения всех фоновых заданий.▪️ Когда использовать:
📍Массовая обработка файлов (сжатие, конвертация).
📍Сканирование сети.
📍Пакетные вычисления или API-запросы.
BashTex 📱 #bash