循环遍历文件并运行shell脚本

时间:2017-03-30 22:14:45

标签: linux shell scripting cron

我在Linux中有一个shell脚本:

#!/bin/bash
#This script is to import tables from mysql to hdfs
source /home/$USER/mysql/source.sh
[ $# -ne 1 ] && { echo "Usage : $0 table ";exit 1; }
table=$1
sqoop import --connect ${domain}:${port}/${database} \
             --username ${username} --password ${password}\
             --query "select * from ${table} where \$CONDITIONS" \
             -m 1 --as-parquetfile --hive-import --hive-database ${hivedatabase} \
             --hive-table ${table} --map-column-java Date=String \
             --target-dir /user/hive/warehouse/${hivedatabase}.db/${table}\
             --outdir /home/$USER/logs/outdir

echo "****************************************************"

此脚本将表名作为参数。表名称位于名为 tables.txt 的文件中。

source.sh 文件内容:

domain=jdbc:mysql://XXXXXXXXX
port=3306
database=testing
username=xxxxxx
password=xxxxxxx
hivedatabase=testing 

现在我想并行安排这个脚本。我想要做的是一次为10个表安排这个脚本。就像从 tables.txt 中获取前10个表名,然后运行此脚本。如果为表执行脚本,则取第11个表,依此类推......

是否可以在cron工作中完成,或者我们如何实现这一目标。

请建议最好的方法。

1 个答案:

答案 0 :(得分:0)

出于本答案的目的,我们假设您的脚本位于名为load_data.sh的文件中,您的设置位于settings.sh,并且您的表名列表位于{{1 }}。现在你可以运行:

tables.txt

阅读xargs --max-procs 10 -n 1 sh load_data.sh < tables.txt 手册页了解详情; xargs导致--max-procs一次最多生成10个进程,并且它将为每个调用传递一个表名。