我正在尝试使用多个参数在多个远程服务器上运行脚本。 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个进程:
当看到输出累积时,看起来真正发生的是:
- 并行运行。 完成后,其他两个正在并行运行。
如何让所有四个同时并行运行?
谢谢,
答案 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