我已经做过很多次,通常只是滚动自己的脚本来完成作业控制。通常,如果您具有要在文件中运行的所有脚本的名称,则解决方案如下所示:
#!/bin/bash
scripts=$(cat scriptfiles.txt)
declare -i NUM=0
declare -i MAX_PROCS=30
for script in "$scripts"
do
NUM=$((NUM+1))
ssh remote.host.ip "${script}" > ${script}.log 2>&1 &
if [ $NUM -ge $MAX_PROCS ];then
echo "Waiting for $NUM processes to finish."
wait
NUM=0
fi
done
echo "Waiting for final $NUM processes to finish."
wait
exit
这是蛮力的,但有效。另外,您不需要在系统中添加任何其他软件,例如parallel。
一个大问题是,wait命令将等待最慢的脚本完成,这会浪费时间。我创建了脚本来解决这种情况,但是您可以想象它们会变得更加复杂。如果所有脚本的运行时间大致相同,则效果很好。
另一个问题是您可能必须调整MAX_PROCS才能确定最佳性能。
当然,ssh连接的数量可能会变得笨拙。在这种情况下,只需将此脚本移至远程主机,然后更改“ ssh ...”行即可直接运行脚本。