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

У меня есть 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 .

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

  • разделите 1200 страниц документа на 500 страниц, а затем оставшиеся
  • ") Ошибка синтаксиса Недействительный арифметический оператор (маркер ошибки"
  • Флокирование filedescriptor в сценарии оболочки
  • Как я могу безопасно гарантировать, что переменная содержит только действительное имя файла?
  • Прочитайте файл по строкам и введите другую строку
  • Bash Scripting: автоматизировать команду в консоли
  • BASH- Найти владельца файла
  • Как запускать несколько сценариев одновременно?
  • UNIX be-spoke Shell-Script / Команды
  • Добавление 2 переменных в файл в сценарии ожидания
  • Bash - регулярное выражение для соответствия наборам чисел
  • Interesting Posts

    Полноэкранные игры блокируют рабочий стол после минимизации (Bumblebee + Nvidia)

    Как изменить настройки SSH для клиента?

    Как проверить, была ли переменная передана функции в Bash?

    создать «виртуальный каталог» с установленным устройством

    Как проверить Tomcat на SVN?

    Почему определенный путь используется как имя файла при передаче файлов через scp на хост Windows?

    Загрузка .profile из .bash_profile или вообще не используется bash_profile?

    Как удалить ненужные файлы с помощью тильды с помощью команды linux?

    сервис запущен при загрузке, ведь все остальное?

    Разберите массив RAID 1 без удаления / переустановки системы

    как выпустить шаблон «начало строки» для ag

    Является ли библиотека GNU PDF активной разработкой?

    Восстановление данных в поврежденном каталоге в файловой системе ext3

    Как определить символическую ссылку, которую я могу использовать во всех моих каталогах

    Как обновить Fedora 17 до 18 удаленно через SSH

    Linux и Unix - лучшая ОС в мире.