여러 서버에서 sh 스크립트를 병렬로 실행

여러 서버에서 sh 스크립트를 병렬로 실행

루프의 여러 서버에서 작업을 수행하려고 하는데 첫 번째 서버에서 작업을 시작하고 첫 번째 서버가 완료될 때까지 기다리지 않고 두 번째 서버로 직접 이동하고 싶습니다.

HOSTS="host1 host2"
    For hostname in ${HOST} ;
do ssh -tt ${USERNAME}@${hostname} << EOF
actions
exit
EOF
Done 

Linux sh bash에서 이 작업을 수행하는 방법을 아는 사람이 있습니까?

미리 감사드립니다.

답변1

pdsh귀하의 요구를 충족시키는 것 같습니다. 다중 스레드 방식으로 SSH 연결을 병렬로 실행합니다.

예:

$ pdsh -w 192.168.1.4,192.168.1.250 uname -r
192.168.1.4: 2.6.32-431.17.1.el6.x86_64
192.168.1.250: 2.6.32-431.11.2.el6.x86_64
$

pdsh를 사용한 병렬 쉘

단일 파일을 여러 원격 사이트에 동시에 보내는 방법은 무엇입니까?

답변2

GNU 병렬 처리 사용:

parallel -S host1,host2 --nonall uname -a

작업이 더 복잡한 경우 함수를 만듭니다.

do_actions() {
   action
   packed
   function
}
export -f do_actions
HOSTS="host1,host2"
parallel -S $HOSTS --ssh 'ssh -l '$USERNAME --nonall --env do_actions do_actions

사용자 이름이 다음과 같으면 whoami충분합니다 .

parallel -S $HOSTS --nonall --env do_actions do_actions

GNU Parallel은 전역적으로 설치할 필요가 없습니다. 설치되지 않은 경우 개별적으로 설치할 수 있습니다.

wget pi.dk/3
bash 3

관련 정보