여러 서버에서 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

관련 정보