gpt4 book ai didi

linux - 如何在 sh 文件中并行运行 shell 脚本命令?

转载 作者:行者123 更新时间:2023-12-04 18:37:30 24 4
gpt4 key购买 nike

我正在尝试备份我的数据库服务器中的表。

我有大约200张 table 。我有一个 shell 脚本,其中包含用于备份每个表的命令,例如:

备份.sh

psql -u username ..... table1 ... file1;
psql -u username ..... table2 ... file2;
psql -u username ..... table3 ... file3;

我可以运行脚本并在我的机器上创建备份。但是由于有 200 个表,它会按顺序运行命令并且需要大量时间。
我想并行运行备份命令。我看过他们建议使用 的文章。 && 在每个命令之后或使用 nohup命令或 wait命令。

但我不想编辑脚本并包含大约 200 个这样的命令。

有什么方法可以并行运行这些 shell 脚本命令列表?类似于 nodejs做?有可能做到吗?还是我看错了?

脚本中的示例命令:
psql --host=somehost --port=5490 --username=user --dbname=db -c '\copy dbo.tablename TO "/home/username/Desktop/PostgresFiles/tablename.csv" with DELIMITER ","';

最佳答案

您可以利用 xargs 并行运行命令,并控制并发作业的数量。运行 200 个备份作业可能会使您的数据库不堪重负,并导致性能不佳。

假设您有 backup.sh,每行有一个备份命令

xargs -P5 -I{} bash -c "{}" < backup.sh

应修改 backup.sh 中的命令以允许引用(尽可能使用单引号,转义双引号):
psql --host=somehost --port=5490 --username=user --dbname=db -c '\copy dbo.tablename TO \"/home/username/Desktop/PostgresFiles/tablename.csv\" with DELIMITER \",\"';

其中 -P5 控制并发作业的数量。这将能够处理没有双引号的命令行。对于上述脚本,您更改 "\copy ..."'\copy ...'
更简单的替代方法是使用助手 backup-table.sh ,它将接受两个参数(表,文件),并使用
xargs -P5 -I{} backup-table.sh "{}" < tables.txt

并将所有复杂的引用放入 backup-table.sh

关于linux - 如何在 sh 文件中并行运行 shell 脚本命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58960414/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com