Я делал это несколько раз и обычно просто запускаю свой собственный скрипт, чтобы выполнять работу с контролем работы. Обычно, если у вас есть имена всех скриптов, которые вы хотите запустить в файле, решение выглядит так:
#!/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
Это грубая сила, но эффективная. Кроме того, вам не нужно добавлять дополнительное программное обеспечение, такое как параллельное, в ваши системы.
Большая проблема заключается в том, что команда wait будет ожидать завершения самого медленного сценария, что может тратить время. Я создал сценарии, чтобы позаботиться об этой ситуации, но они становятся более сложными, как вы можете себе представить. Если все ваши сценарии выполняются примерно за одно и то же время, это работает хорошо.
Другая проблема заключается в том, что вам, возможно, придется настроить MAX_PROCS, чтобы определить наилучшую производительность.
Конечно, количество соединений ssh может быть громоздким. В этом случае просто переместите этот сценарий на удаленный хост и измените строку «ssh ...», чтобы просто запускать сценарии напрямую.