Можно ли запустить команду на нескольких узлах одновременно?

Можно ли запустить команду на нескольких узлах одновременно?

Возможно ли запустить команду на 10 узлах одновременно?

Вот часть моего сценария:

#! /bin/sh

nb_lignes=`wc -l $1 | cut -d " " -f1`
echo "$nb_lignes machines"

for i in $(seq $nb_lignes)
do
    machine=`head $1 -n $i | tail -1`
    ssh root@$machine -x "instruction"  

done

решение1

Да, это так. dshКоманда предоставляет именно то, о чем вы говорите. Она выполнит ту же команду для списка узлов, указанных параметром, и вы даже можете проанализировать stdout и stderr для ответа любого из этих узлов.

Для его использования я рекомендую использовать аутентификацию по ключу SSH, чтобы избежать dshкоманды на запрос пароля.

Есть альтернатива, называемая clusterssh. Это интерактивная версия команды dsh, поэтому для каждой машины будет открыто мини-окно с оболочкой, так что вы можете ввести команду в определенной оболочке или глобальную команду для всех окон.

решение2

С использованием GNU Parallel это выглядит так:

parallel --slf $1 --nonall instruction

Он создаст одно задание на каждый ЦП.

GNU Parallel — это общий распараллеливатель, который позволяет легко запускать задания параллельно на одной машине или на нескольких машинах, к которым у вас есть доступ по ssh. Часто он может заменить цикл for.

Если у вас есть 32 различных задания, которые вы хотите запустить на 4 ЦП, то прямой способ распараллеливания — запустить 8 заданий на каждом ЦП:

Простое планирование

Вместо этого GNU Parallel запускает новый процесс после завершения предыдущего, сохраняя при этом активными ЦП и, таким образом, экономя время:

Параллельное планирование GNU

Монтаж

Если GNU Parallel не упакован для вашего дистрибутива, вы можете выполнить персональную установку, которая не требует доступа root. Это можно сделать за 10 секунд, выполнив следующее:

(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash

Другие варианты установки см.http://git.savannah.gnu.org/cgit/parallel.git/tree/README

Узнать больше

Смотрите больше примеров:http://www.gnu.org/software/parallel/man.html

Посмотрите вступительные видеоролики:https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

Пройдите обучение:http://www.gnu.org/software/parallel/parallel_tutorial.html

Подпишитесь на рассылку, чтобы получить поддержку:https://lists.gnu.org/mailman/listinfo/parallel

Связанный контент