Я робив це неодноразово і зазвичай просто прокручую свій власний сценарій, щоб виконувати роботу з контролем роботи. Якщо у вас є назви всіх скриптів, які ви хочете запустити у файл, рішення виглядає так:
#!/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
Це груба сила, але ефективна. Крім того, вам не потрібне додаткове програмне забезпечення, наприклад паралельне, додане до ваших систем.
Велика проблема полягає в тому, що команда очікування чекатиме завершення найповільнішого сценарію, що може втратити час. Я створив сценарії для вирішення цієї ситуації, але вони складніші, як ви можете собі уявити. Якщо всі ваші сценарії працюють приблизно за однаковий час, це добре працює.
Ще одна проблема - можливо, вам доведеться налаштувати MAX_PROCS, щоб визначити найкращу ефективність.
Звичайно, кількість ssh-з'єднань може стати непростим. У такому випадку просто перенесіть цей скрипт на віддалений хост і змініть рядок "ssh ...", щоб просто запустити сценарії безпосередньо.