TGViewer
BashTex | Linux BashTex | Linux @bash_tex · 2.51K subscribers
Post #221 1.55K
Фоновая очередь задач на Bash с контролем параллелизма

Когда вы автоматизируете инфраструктуру, часто приходится запускать десятки или сотни задач - но неконтролируемый параллелизм может уронить систему. Вместо этого - реализуем контролируемую очередь, ограничивающую количество одновременных процессов.

▪️ Идея:

Создаём продвинутую фоновую очередь на Bash, с:

ограничением на количество параллельных задач;
логированием статуса выполнения;
возможностью динамически подставлять команды.



▪️ Пример:


#!/usr/bin/env bash
set -euo pipefail

MAX_PARALLEL=4
LOGFILE="./queue.log"
TASKS=(
"sleep 3 && echo task1"
"sleep 2 && echo task2"
"sleep 1 && echo task3"
"sleep 4 && echo task4"
"sleep 5 && echo task5"
"sleep 2 && echo task6"
)

run_task() {
local cmd="$1"
local id=$(date +%s%N)
echo "[$id] START: $cmd" >> "$LOGFILE"
eval "$cmd"
local status=$?
echo "[$id] END: $cmd (exit=$status)" >> "$LOGFILE"
return $status
}

active_jobs() {
jobs -rp | wc -l
}

for task in "${TASKS[@]}"; do
run_task "$task" &

# Ждём, если число фоновых задач превысило лимит
while (( $(active_jobs) >= MAX_PARALLEL )); do
sleep 0.2
done
done

wait
echo "Все задачи завершены. Лог: $LOGFILE"


▪️ Объяснение:

jobs -rp выводит только PID'ы активных фоновых процессов.
run_task() логирует начало, завершение и статус команды.

Используем eval - аккуратно, если команды приходят из недоверённого источника.

🌟 Такой подход можно использовать в:

CI/CD пайплайнах без внешних тулов;
миграции данных или резервном копировании;
массовой обработке видео/изображений;
сетевом сканировании и мониторинге.


BashTex 📱 #bash
  • 👍 10
  • 👨‍💻 2
More from @bash_tex
  1. Oct 12, 2026xargs против while read: где быстрее и безопаснее Обе конструкции позволяют обработать спи…
  2. Oct 9, 2026BashTex 📱 #мем
  3. Oct 8, 2026Bridge FDB - как Linux bridge узнаёт, где находится MAC Linux bridge не знает заранее, за…
  4. Oct 7, 2026/dev/tcp - сетевое соединение средствами Bash В Bash есть малоизвестная возможность работа…
  5. Oct 6, 2026Ephemeral ports - почему заканчиваются исходящие TCP-порты Когда приложение устанавливает…
  6. Oct 5, 2026name_to_handle_at() - как получить файловый объект без обычного пути В Linux обычно обраща…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →