4

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

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

脚本.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

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

我怎样才能让它们四个同时并行运行?

谢谢,

4

1 回答 1

5

您正在做出设计决策:运行 --onall 时 -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
于 2013-12-31T13:35:33.460 回答