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

Parallel processing 当使用--onall时,GNU parallel不会在远程服务器上并行运行,parallel-processing,gnu-parallel,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

我正在尝试在多个远程服务器上运行一个脚本,使用多个参数。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正在运行带有参数1的script.sh
  • rh32运行script.sh和param2
  • rh64正在运行带有参数1的script.sh
  • rh64使用param2运行script.sh
当查看累积的输出时,似乎真正发生的是:

  • rh32正在运行带有参数1的script.sh
  • rh64正在运行带有参数1的script.sh
-正在并行运行当它们完成时,其他两个正在并行运行

我怎样才能使它们同时并行运行呢


谢谢,

您正在做出一个设计决策:当您运行--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