1

我有一个简单的 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 

但是,这似乎不起作用,并且主节点上的外壳在我执行之后就挂起./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
4

1 回答 1

1

根据您的描述,您正在做正确的事情,因此您可能遇到了错误。

尝试最小化 workerList.txt 和 folderList.txt,然后运行:

parallel -D ...

(并且还检查了可能对您有用的选项 --result )。

于 2014-08-07T07:49:59.260 回答