동시에 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을 구문 분석할 수도 있습니다.
이를 사용하려면 dsh
비밀번호를 묻는 명령을 피하기 위해 SSH 키 인증을 사용하는 것이 좋습니다.
라는 대안이 있습니다 clusterssh
. 이는 명령의 대화형 버전이므로 dsh
머신별로 쉘이 있는 미니 창이 열리므로 특정 쉘에 명령을 입력하거나 모든 창에 전역 명령을 입력할 수 있습니다.
답변2
GNU Parallel을 사용하면 다음과 같습니다:
parallel --slf $1 --nonall instruction
CPU당 하나의 작업이 생성됩니다.
GNU Parallel은 일반적인 병렬 처리기이며 동일한 시스템 또는 SSH 액세스 권한이 있는 여러 시스템에서 작업을 병렬로 쉽게 실행할 수 있도록 해줍니다. 종종 for
루프를 대체할 수 있습니다.
4개의 CPU에서 32개의 서로 다른 작업을 실행하려는 경우 병렬화하는 간단한 방법은 각 CPU에서 8개의 작업을 실행하는 것입니다.
대신 GNU Parallel은 프로세스가 완료되면 새 프로세스를 생성하여 CPU를 활성 상태로 유지하여 시간을 절약합니다.
설치
GNU Parallel이 배포용으로 패키지되어 있지 않은 경우 루트 액세스가 필요하지 않은 개인 설치를 수행할 수 있습니다. 다음과 같이 하면 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