在bash/linux中并行运行shell脚本

Use*_*345 3 linux bash shell cron crontab

我有一个shell脚本job.sh.

内容如下:

#!/bin/bash

table=$1

sqoop job --exec ${table}
Run Code Online (Sandbox Code Playgroud)

现在当我做./job.sh table1

该脚本成功执行.

我在一个文件中有表名tables.txt.

现在我想循环遍历tables.txt文件并job.sh并行执行脚本10次.

我怎样才能做到这一点?

理想情况下,当我执行脚本时,我希望它在下面执行;

./job.sh table1
./job.sh table2
./job.sh table3
./job.sh table4
./job.sh table5
./job.sh table6
./job.sh table7
./job.sh table8
./job.sh table9
./job.sh table10
Run Code Online (Sandbox Code Playgroud)

有哪些选择?

Mar*_*ell 5

只需使用GNU Parallel

parallel -a tables.txt --dry-run sqoop job --exec {}
Run Code Online (Sandbox Code Playgroud)

样本输出

sqoop job --exec table7
sqoop job --exec table8
sqoop job --exec table9
sqoop job --exec table6
sqoop job --exec table5
sqoop job --exec table4
sqoop job --exec table3
sqoop job --exec table2
sqoop job --exec table1
sqoop job --exec table10
Run Code Online (Sandbox Code Playgroud)

如果看起来正确,只需删除--dry-run并再次运行即可.

如果您希望一次运行4个作业,请使用:

parallel -j 4 ....
Run Code Online (Sandbox Code Playgroud)

如果您希望每个CPU核心有一个作业,那么这是默认设置,因此您无需执行任何操作.

如果您希望按顺序保留作业,请添加-k选项:

parallel -k ...
Run Code Online (Sandbox Code Playgroud)