내 루프의 여러 서버에서 작업을 실행하려고 하는데 첫 번째 서버에서 작업을 시작하고 첫 번째 서버가 완료될 때까지 기다리지 않고 두 번째 서버로 직접 이동하고 싶습니다.
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
$
답변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