Eu fiz isso em várias ocasiões e, geralmente, apenas rolo meu próprio script para fazer o trabalho com o controle do trabalho. Genericamente, se você tiver os nomes de todos os scripts que deseja executar em um arquivo, a solução se parece:
#!/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
É força bruta, mas eficaz. Além disso, você não precisa de nenhum software extra como paralelismo seja adicionado aos seus sistemas.
Um grande problema é que o comando wait espera que o script mais lento seja concluído, o que pode perder tempo. Eu criei scripts para cuidar dessa situação, mas eles ficam mais complexos como você pode imaginar. Se todos os seus scripts forem executados na mesma quantidade de tempo, isso funciona bem.
Outro problema é que você pode precisar ajustar o MAX_PROCS para determinar o melhor desempenho.
É claro que o número de conexões ssh pode ficar pesado. Nesse caso, basta mover este script para o host remoto e alterar a linha "ssh ..." para executar os scripts diretamente.