로컬 컴퓨터가 다운된 경우 다른 서버에서 파일을 복사하는 방법

로컬 컴퓨터가 다운된 경우 다른 서버에서 파일을 복사하는 방법

각 서버에서 실행되어 특정 파일을 복사하는 스크립트가 있습니다. 스크립트는 내가 실행 중인 위치와 복사해야 할 파일을 알고 있습니다.

스크립트는 로컬 데이터 센터에서 파일을 복사 local_dc하지만 작동이 중단되거나 응답하지 않는 경우 원격 데이터 센터에서 동일한 파일을 복사하고 , 또한 작동이 중단된 경우 표시된 대로 remote_dc_1다른 원격 데이터 센터에서 동일한 파일을 복사합니다. remote_dc_2아래에 -

do_Copy() {
  el=$1
  PRIMSEC=$2
  scp david@"$local_dc":"$dir3"/new_weekly_2014_"$el"_200003_5.data "$PRIMSEC"/. || scp david@"$remote_dc_1":"$dir3"/new_weekly_2014_"$el"_200003_5.data "$PRIMSEC"/. || scp david@"$remote_dc_2":"$dir3"/new_weekly_2014_"$el"_200003_5.data "$PRIMSEC"/.
}
export -f do_Copy

# copying 5 files in parallel simultaneously in primary and secondary folder
parallel --retries 10 -j 5 do_Copy {} $PRIMARY ::: $primary_partition &
parallel --retries 10 -j 5 do_Copy {} $SECONDARY ::: $secondary_partition &
wait

echo "All files copied successfully."

이제 내 질문은 다음과 같습니다.

  • local_dc기계가 다운되면 확실히 remote_dc_1기계에서 복사 될 것이라고 가정합니까 ? 시스템도 다운된 경우 remote_dc_1에서 복제됩니까 remote_dc_2?
  • 이제 세 대의 머신이 모두 다운되면 어떻게 될까요? 이 경우 메시지를 인쇄하고 싶습니다. 세 대의 시스템이 모두 종료되었으므로 쉘 스크립트를 종료하십시오.

기계를 끄지 않고서는 이것을 제대로 테스트할 수 없습니다.

답변1

예. 첫 번째 항목에서 복사를 시도하고, 실패하면 두 번째 항목을 시도하고, 역시 실패하면 세 번째 항목을 시도합니다. 마지막에 이메일을 받으려면 다음 명령을 사용하십시오.

scp ... || scp ... || scp || echo "All attempts failed" | mailx -r "[email protected]"

각 scp 명령이 실패했는지 알려 주려면 하위 쉘을 사용할 수 있습니다:

scp ... || (echo "machine1 down" | mailx -r "[email protected]"&& scp ... ) ||
( echo "machine2 down" | mailx -r "[email protected]" && scp ... ) || 
     echo "All attempts failed" | mailx -r "[email protected]"

답변2

무슨 일이 일어날지는 스크립트에 실행하라고 지시한 명령에 따라 달라집니다. 제가 전문가는 아니지만 최근 비슷한 상황을 겪은 적이 있습니다.

내가 한 일은 가능한 서버에 대한 몇 가지 변수를 만든 다음 루프를 사용하여 해당 IP에 대한 연결을 테스트하고 작동하는 것으로 확인되면 해당 IP를 사용할 IP로 설정하는 것입니다(FTPHOST).

사용자=사용자 이름

패스=비밀번호

시도1=your.first.server.ip

시도2=your.second.server.ip

시도3=your.third.server.ip

컬 --connect-timeout 5 ftp://$USER:$PASS@$attempt1 >> /dev/null 2>&1;

if [$? =='0'];

then 

    FTPHOST=$attempt1; 

    echo "FTPHOST set to $FTPHOST"

else 

    echo "Connection to $attempt1 failed. Attempting next IP"; 

    curl --connect-timeout 5 ftp://$USER:$PASS@$attempt2 >> /dev/null 2>&1;

    if [ $? == '0' ];

        then

그리고 작동하는 IP를 찾을 때까지 가능한 한 많은 IP를 통해 루프를 반복합니다. 둘 다 작동하지 않으면 물론 아무 것도 다운로드되지 않으므로 이에 따라 스크립트를 실행하십시오.

관련 정보