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