Shell 脚本 - 循环一次执行多个 MySQL 查询

Shell 脚本 - 循环一次执行多个 MySQL 查询

我试图解决这个问题,我有一个小脚本来连接到存储在文件中的主机列表。

#!/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 个脚本的 shell 脚本,但我真的不知道如何处理它。

答案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!!"

(shell 内置命令wait)使脚本等待,直到所有后台作业都完成。

这是一种非常简单的方法,您可能需要添加逻辑,例如同时将最多 4 个作业放在后台。

另一种方法是使用parallel其工作原理有点类似xargs,但设计用于并行运行作业。

相关内容