Shell Script - цикл, чтобы сделать множественные MySQL Query сразу

Я пытался решить эту проблему, у меня есть небольшой скрипт для подключения к списку хостов, хранящихся в файле.

#!/bin/bash
num=$(wc -l < ip.txt)
while read ip; do
    mysql --login-path=login -h $ip "database" < "query.sql"
    echo "Script 1 - Remaining: "$num $ip
    num=$((num-1))
done < ip.txt
echo "Script 1 Finished!!"

Я хочу выполнить несколько запросов MySQL одновременно, например, 10 или 20, чтобы я мог закончить тест быстрее, я попытался создать другой сценарий оболочки, который запускает 4 сценария одновременно, но я действительно не знаю, как с этим справиться.

1 ответ

Решение

Поместите задания mysql в фоновый режим:

#!/bin/bash
num=$(wc -l < ip.txt)
while read ip; do
    mysql --login-path=login -h $ip "database" < "query.sql" &
    num=$((num-1))
done < ip.txt
wait
echo "Script 1 Finished!!"

wait заставляет скрипт ждать завершения всех фоновых заданий.

Это довольно простой способ сделать это, вы можете добавить логику, чтобы поместить, например, максимум 4 задания в фоновом режиме.

Альтернативой является использование parallel который работает как xargs но предназначен для параллельного запуска заданий.

Другие вопросы по тегам