我有一个简单的bash脚本,它将文本文件中的目录名列表作为输入。它逐个遍历这些目录,将pwd
的输出复制到文件,并将此文件移动到结果目录。我可以轻松地使用Gnuparallel在我的4核机器上并行化这个脚本。 bash脚本(myScript.sh
)如下:
#!/bin/bash
par_func (){
name=$1
cd /home/zahaib/parentFolder/$name
pwd > $name.txt
mv $name.txt /home/zahaib/result/
cd /home/zahaib/parentFolder
}
export -f par_func
parallel -a /home/zahaib/folderList.txt -j 10 par_func
现在我想在群集上并行化相同的脚本,所有工作节点都已安装主节点的主目录,因此我可以在所有工作节点上看到ls /home/zahaib/
的输出。
我尝试使用--env
导出par_func
。我还在workerList.txt
文件中有一个工作节点列表。我最初的想法是通过使用以下内容更改上面脚本中的最后一行来调用parallel
:
parallel -vv --env par_func --slf /home/zahaib/workerList.txt -a /home/zahaib/folderList.txt -j 10 par_func
但是,这似乎不起作用,主节点上的shell只在我执行./myScript.sh
后挂起。我在这里缺少什么?
我的folderList.txt的内容如下:
docs
dnload
driver
pics
music
.
.
我的workerList.txt的内容如下:
2//usr/bin/ssh zahaib@node-1
2//usr/bin/ssh zahaib@node-2
2//usr/bin/ssh zahaib@node-3
答案 0 :(得分:1)
根据您的描述,您正在做正确的事情,因此您可能遇到了错误。
尝试最小化workerList.txt和folderList.txt,然后运行:
parallel -D ...
(还要检查可能对你有用的选项--result)。