Параллельное выполнение в Bash для ускорения скриптов

Практические лайфхаки для разработчиков, DevOps и админов: Docker, Linux, Bash, Python, Golang, Ansible, логи и безопасность — только рабочие решения. Даем готовые команды, конфиги и приёмы диагностики, которые экономят часы и дни. Если нужно быстро настроить, отладить и обезопасить инфраструктуру — вы по адресу.

bashпараллельные процессыxargs

ℹ️ Если ваш Bash-скрипт выполняет большое количество задач (например, копирование файлов, обработка данных или запросы к API), вместо последовательного выполнения можно использовать параллельные процессы, чтобы значительно ускорить выполнение.

🔥 Пример:

🖥 1. Последовательное выполнение (медленно)

for url in $(cat urls.txt); do
    curl -O "$url"
done

❔ Этот код скачивает файлы по одному. Это медленно, особенно если у вас много URL.

👨‍💻 2. Параллельное выполнение (быстро)

Используем встроенные возможности Bash для запуска задач в фоне:

for url in $(cat urls.txt); do
    curl -O "$url" &
done
wait

❔ Добавление & запускает команды в фоне, а wait дожидается завершения всех процессов.

⚙️ 3. Управление количеством параллельных процессов

Чтобы избежать перегрузки системы, используйте xargs с ограничением количества потоков:

cat urls.txt | xargs -n 1 -P 5 curl -O

ℹ️ Здесь:

  • -n 1 — передаёт один аргумент за раз.
  • -P 5 — ограничивает выполнение максимум до 5 процессов одновременно.

📑 4. Улучшение логирования

Для лучшего отслеживания выполненных задач можно добавить вывод логов:

cat urls.txt | xargs -n 1 -P 5 -I {} bash -c 'echo "Downloading {}"; curl -O "{}"'

✳️ Этот метод особенно полезен для DevOps-задач, автоматизации обработки данных и CI/CD пайплайнов.

tags: #полезно #bash #linux

🧭 @recura_tech

Скрин терминала с примерами Bash: циклы curl, фоновые процессы (&), xargs и wait — демонстрация параллельного скачивания.
Пример терминала с командами для параллельного скачивания файлов в Bash.

Читайте так же