使用--onall时,GNU并行不会在远程服务器上并行运行

时间:2013-12-30 12:25:57

标签: parallel-processing gnu-parallel

我正在尝试使用多个参数在多个远程服务器上运行脚本。 GNU并行命令是:

parallel --onall -S ${RH32},{RH64} /shared/loc/script.sh ::: param1 param2

script.sh:

host=`uname -n`
param=$1
logfile=/shared/loc/log-$host-$param
for i in `seq 1 5`; do
    touch ${logfile}_$i
    sleep 2
done

我正在尝试并行运行4个进程:

  • rh32使用param1运行script.sh
  • rh32使用param2运行script.sh
  • rh64使用param1运行script.sh
  • rh64使用param2运行script.sh

当看到输出累积时,看起来真正发生的是:

  • rh32使用param1运行script.sh
  • rh64使用param1运行script.sh

- 并行运行。 完成后,其他两个正在并行运行。

如何让所有四个同时并行运行?

谢谢,

1 个答案:

答案 0 :(得分:4)

你正在做出一个设计决定:当你运行-on时,-j意味着什么?决定是-j是同时运行的主机数(在您的情况下为2)。这样做是为了便于在多个主机上并行地串行运行命令。

您可以做的是使用另一个parallel命令包裹parallel命令:

parallel parallel --onall -S ${RH32},${RH64} --argsep // /shared/loc/script.sh // ::: param1 param2

这会为每个参数生成parallel,内部parallel将为每个服务器生成。

另一个解决方案是自己编写ssh命令:

parallel ssh {1} /shared/loc/script.sh {2} ::: ${RH32} ${RH64} ::: param1 param2