rsync를 사용하여 ssh를 통해 많은 양의 데이터 (> 80GB)를 전송해야합니다. 모든 것이 잘 작동하지만 백업 데이터가 전송되는 DSL 연결은 24 시간마다 최대 3 분 동안 끊어집니다 (전환 공급자는 옵션이 아닙니다).
내가 어떻게 할:
연결이 백업 될 때 자동으로 전송을 다시 시작 하시겠습니까?
실수로 두 개의 rsync 명령이 동시에 실행되고 있지 않은지 확인하십시오.
rsync를 사용하여 ssh를 통해 많은 양의 데이터 (> 80GB)를 전송해야합니다. 모든 것이 잘 작동하지만 백업 데이터가 전송되는 DSL 연결은 24 시간마다 최대 3 분 동안 끊어집니다 (전환 공급자는 옵션이 아닙니다).
내가 어떻게 할:
연결이 백업 될 때 자동으로 전송을 다시 시작 하시겠습니까?
실수로 두 개의 rsync 명령이 동시에 실행되고 있지 않은지 확인하십시오.
답변:
다음이 도움이 될 것입니다 :
#!/bin/bash
while [ 1 ]
do
rsync -avz --partial source dest
if [ "$?" = "0" ] ; then
echo "rsync completed normally"
exit
else
echo "Rsync failure. Backing off and retrying..."
sleep 180
fi
done
연결이 끊어지면 rsync는 0이 아닌 종료 코드로 종료됩니다. 이 스크립트는 단순히 rsync를 다시 실행하여 동기화가 정상적으로 완료 될 때까지 계속합니다.
이것은 Peter의 대답과 거의 동일하지만 사용자가 원하는 원격 파일 및 저장하려는 위치 (ssh를 통한 rsync 수행) 옵션을 제공합니다. USER 및 HOST를 각각 사용자 이름 및 호스트로 바꾸십시오.
#! / bin / bash echo -e "이스케이프 된 전체 파일 경로를 입력하십시오 :" -r 경로 읽기 echo "경로 : $ path" echo -e "대상을 입력하십시오 :" -r dst 읽기 에코 "대상 : $ dst" [1] 동안 하다 rsync --progress --partial --append -vz -e ssh "USER @ HOST : $ path"$ dst [ "$?" = "0"]; 그때 에코 "동기화가 정상적으로 완료되었습니다" 출구 그밖에 echo "rsync failure. 잠시 후 다시 시도 중 ..." 수면 60 fi 끝난
여기에서 사용 된 rsync 옵션은 전송 중 진행률 통계, 예기치 않은 실패시 부분 파일 저장 및 재개시 부분적으로 완료된 파일에 추가하는 기능을 활성화합니다. -v 옵션은 상세도를 높이고 -z 옵션은 압축을 가능하게하며 (느린 연결에는 좋지만 양쪽 끝에 더 많은 CPU 전원이 필요함), -e 옵션을 사용하면 ssh를 통해이 전송을 수행 할 수 있습니다 (암호화는 항상 좋습니다).
참고 : ssh로 공개 키 로그인을 사용하도록 설정 한 경우에만 사용 하십시오. 그렇지 않으면 다시 시작할 때 암호를 묻습니다 (스크립트의 모든 기능이 종료 됨).
supervisor 데몬 (프로세스 제어 관리자)은 다음과 유사한 구성으로 양쪽의 rsa 인증서를 생성 한 후 매우 잘 작동 할 수 있습니다.
[program:rsync-remoteserver]
command=rsync -avz --progress root@server.com:/destination /backup-path
stdout_logfile=/out-log-path
stderr_logfile=/errlogpath
@ 피터의 대답은 매우 유용하지만 --update
옵션 을 사용하는 것이 중요했습니다 . 연결이 재개 된 후 --update
rsync 없이 처음부터 모두 동기화하려고했습니다. 을 사용하면 --update
이미 존재하는 파일을 건너 뜁니다.
rsync --partial --update --progress -r [SOURCE] [DESTINATION]
--update
이미 존재하는 파일을 건너 뜁니다 ... 대상에 완전히 복사되지 않은 파일 포함. 나는 그것이 대부분의 유스 케이스에 반대한다고 생각합니다.
rsync --partial --update file1 remotehost:file1
. 15 %를 양도 한 후 양도를 해지했습니다 (kill -KILL).
while ./run_script; do echo "Retrying..."; done; echo "Done."
확인run_script
반환0
성공을.