machineB
작업 중이어서 파일을 복사하려고 합니다 .machineC
machineA
machineA
파일이 없으면 machineB
분명히 존재해야 하므로 machineC
먼저 파일을 복사해 보고 machineB
, 없으면 machineB
에서 동일한 파일을 복사해 보겠습니다 machineC
.
저는 GNU 병렬 라이브러리를 사용하여 파일을 병렬로 복사하고 있는데 잘 작동합니다. 현재 두 개의 파일을 병렬로 복사하고 있습니다.
이전에는 GNU를 사용하여 폴더 PRIMARY_PARTITION
의 파일을 병렬로 복사했으며 PRIMARY
일단 완료되면 동일한 GNU를 사용하여 폴더 SECONDARY_PARTITION
의 파일을 SECONDARY
병렬로 복사했습니다. 지금까지는 순차 PRIMARY
및 SECONDARY
폴더입니다.
PRIMARY
이제 파일 과 폴더를 모두 복사하기로 결정했습니다 SECONDARY
. 즉, PRIMARY
한 폴더에 두 개의 파일과 한 폴더에 두 개의 파일을 동시에 복사하겠다는 뜻입니다 .SECONDARY
아래는 내 쉘 스크립트입니다 -
#!/bin/bash
export PRIMARY=/test01/primary
export SECONDARY=/test02/secondary
readonly FILERS_LOCATION=(machineB machineC)
export FILERS_LOCATION_1=${FILERS_LOCATION[0]}
export FILERS_LOCATION_2=${FILERS_LOCATION[1]}
PRIMARY_PARTITION=(550 274 2 546 278) # this will have more file numbers
SECONDARY_PARTITION=(1643 1103 1372 1096 1369 1568) # this will have more file numbers
export dir3=/testing/snapshot/20140103
find "$PRIMARY" -mindepth 1 -delete
find "$SECONDARY" -mindepth 1 -delete
do_CopyInPrimary() {
el=$1
scp david@$FILERS_LOCATION_1:$dir3/new_weekly_2014_"$el"_200003_5.data $PRIMARY/. || scp david@$FILERS_LOCATION_2:$dir3/new_weekly_2014_"$el"_200003_5.data $PRIMARY/.
}
export -f do_CopyInPrimary
do_CopyInSecondary() {
el=$1
scp david@$FILERS_LOCATION_1:$dir3/new_weekly_2014_"$el"_200003_5.data $SECONDARY/. || scp david@$FILERS_LOCATION_2:$dir3/new_weekly_2014_"$el"_200003_5.data $SECONDARY/.
}
export -f do_CopyInSecondary
parallel -j 2 do_CopyInPrimary ::: "${PRIMARY_PARTITION[@]}" &
parallel -j 2 do_CopyInSecondary ::: "${SECONDARY_PARTITION[@]}" &
wait
echo "All files copied."
문제 설명:-
위의 스크립트를 사용하면 어느 시점에서 이 예외가 발생했습니다.
ssh_exchange_identification: Connection closed by remote host
ssh_exchange_identification: Connection closed by remote host
ssh_exchange_identification: Connection closed by remote host
현재 하고 있는 일과 동일한 일을 할 수 있는 더 좋은 방법이 있습니까? 나는 여전히 GNU Parallel을 사용하여 작동시킬 수 있을까?라고 생각했습니다.
답변1
이 오류는 일반적으로 동시에 너무 많은 ssh/scp 시작으로 인해 발생합니다. 4까지 달리니까 좀 이상하네요. 이로 인해 /etc/ssh/sshd_config:$FILERS_LOCATION_1+2의 MaxStartups 및 MaxSessions가 너무 낮게 설정되었다고 생각됩니다.
다행히도 명령이 실패하면 GNU Parallel에 다시 시도하도록 요청할 수 있습니다.
do_Copy() {
el=$1
PRIMSEC=$2
scp david@$FILERS_LOCATION_1:$dir3/new_weekly_2014_"$el"_200003_5.data $PRIMSEC/. || scp david@$FILERS_LOCATION_2:$dir3/new_weekly_2014_"$el"_200003_5.data $PRIMSEC/.
}
export -f do_Copy
parallel --retries 10 -j 2 do_Copy {} $PRIMARY ::: "${PRIMARY_PARTITION[@]}" &
parallel --retries 10 -j 2 do_Copy {} $SECONDARY ::: "${SECONDARY_PARTITION[@]}" &
wait
echo "All files copied."