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
но предназначен для параллельного запуска заданий.