Выполнять команду на нескольких секундах параллельно с помощью сценария оболочки

У меня есть 1000 удаленных машин. Я хочу запустить некоторые конкретные команды для всех из них, но параллельно. Я использую эти команды, которые запускаются последовательно:

for f in `cat host.lst` do ./runScript.sh $f done 

Предположим, что host.lst содержит 100 хостов. Я хочу запустить runScript.sh на 100 хостов параллельно. Кроме того, журналы должны поддерживаться.

Я не могу установить какую-либо утилиту на моем компьютере, такую ​​как PSSH .

Я провел много исследований и нашел эти ссылки, но они не помогли. Я не понимаю, как они работают:

Автоматически запускать команды по SSH на многих серверах

Выполнить команду для нескольких файлов, соответствующих шаблону параллельно

Может ли кто-нибудь объяснить логику?

2 Solutions collect form web for “Выполнять команду на нескольких секундах параллельно с помощью сценария оболочки”

 logdir=`mktemp -d` bunch=200 IFS=$'\n' for hosts in $(< hosts.lst xargs -r -L "$bunch"); do IFS=" "; for host in $hosts; do ssh -n -o BatchMode=yes "$host" './runScript.sh' 1>"$logdir/$host.log" 2>&1 & done wait done 

Предполагая, что 100 хостов перечислены один / строка в файле hosts.lst а затем из них выбраны hosts.lst за один раз (200), а на каждом из этих 200 хостов runScript.sh ваш runScript.sh используя ssh в batch mode и в то же время сохраняя stdout+stderr извергающийся из каждого из этих фоновых заданий в файл с именем host в каталоге $logdir , который может быть проверен как и когда требуется.

Наконец, мы ждем, когда один пучок перевернется, прежде чем мы запустим следующий пучок, с помощью команды wait в конце внутреннего цикла for .

Следующая модификация вашего скрипта, которая не требует каких-либо других утилит, будет выполняться параллельно, но может зависеть от ограничений, зависящих от ограничений ваших открытых файлов:

 for f in $(cat host.lst); do ./runScript.sh $f & done 

Чтобы > run.log результаты в журнал, просто добавьте > run.log после done для сохранения в новый файл run.log .

Ключевым изменением является добавление & , которое запускает процесс в фоновом режиме, а не ждет его завершения до выполнения следующей команды.

  • Использование grep в скрипте оболочки для поиска точной строки
  • Код работает вручную на терминале, но не может запускать скрипт
  • Создание личного монтирования tmpfs в сценарии оболочки
  • Поиск / usr / dict / words для поиска слов с определенными свойствами
  • Как использовать `модуль load program / 1.1` в сценарии bash?
  • Использование nohup в /etc/init.d/service
  • Запустите команду в sudo через SSH
  • Поиск текстового файла по столбцу
  • «ошибка каталога» при попытке передать имя каталога в функцию
  • Как распечатать только имя скрипта?
  • как сохранить вывод команды в массив с каждым значением в двойной кавычки
  • Справка по скручиванию
  • Linux и Unix - лучшая ОС в мире.