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

Ome*_*gan 4 parallel-processing gnu-parallel

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

parallel --onall -S ${RH32},{RH64} /shared/loc/script.sh ::: param1 param2
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

我正在尝试并行运行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

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

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

谢谢,

Ole*_*nge 5

您正在做出一个设计决策:--jall运行时-j是什么意思?决定-j是要同时运行的主机数(在您的情况下为2)。这样做是为了很容易在多个主机上并行运行命令。

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

parallel parallel --onall -S ${RH32},${RH64} --argsep // /shared/loc/script.sh // ::: param1 param2
Run Code Online (Sandbox Code Playgroud)

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

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

parallel ssh {1} /shared/loc/script.sh {2} ::: ${RH32} ${RH64} ::: param1 param2
Run Code Online (Sandbox Code Playgroud)