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