rsync
다섯번이나 연결을 시도했습니다 . 파일 I/O 오류를 나타내는 종료 코드 11이 표시됩니다. robocopy
파일 세트를 동일한 대상에 복사 하려고 하면 오류 59가 발생합니다.
문제는 실패한 곳에서는 robocopy
성공한다는 것입니다 rsync
. 로그를 살펴보면 robocopy
오류를 받은 후 즉시 30초 동안 재시도했다는 것을 알 수 있습니다. 이것을 사용해야 하는데 30초 후에 네트워크 오류를 다시 시도하도록 rsync
설정하는 방법을 알고 싶습니다 . rsync
이는 200K가 넘는 다양한 크기의 파일을 전송할 때 5번만 발생합니다. 코드 11 바로 다음에 rsync 로그를 보면 즉시 소스에서 파일 목록을 요청하고 동일한 종료 코드 11로 종료되어 실패했음을 나타냅니다.
명령줄
rsync -rtlzv -e "ssh -i c:/RsyncKeys/wa-ecy-gov-test-rsync-key -o ConnectTimeout=140 -o ConnectionAttempts=18" --quiet --stats --exclude-from='rsyncfilter.txt' --force --delete [email protected]: //sdceco/Apps/RSTUDIO/RpackagesNew --timeout=320 --log-file=c:/rsynclogs/rsync11-05-2020.log
어떤 조언이라도 진심으로 감사드립니다!
답변1
내가 하는 일은 이것과 비슷하다
while :
do
rsync … && break
sleep 60
done
도구가 성공적으로 완료되면 rsync
상태 0(성공)으로 종료되어 루프를 종료합니다. 그렇지 않으면 60초 동안 일시 중지되고 주기가 다시 시작됩니다. 내 구현에서는 다음 k
을 시도한 후 루프를 종료하기 위해 더 긴 지연과 카운터를 사용하는 경향이 있습니다.
ss=127 k=4
while [[ $((k--)) -gt 0 ]]
do
rsync … && ss=0 && break
ss=$?
[[ $k -gt 0 ]] && sleep 300
done
echo "completion status of last rsync is $ss"
retry
최근에 나는 (적어도) 데비안에서 사용할 수 있는 명령을 발견했습니다 . 따라서 루프 코드는 크게 단순화될 수 있습니다.
retry --delay 60 --time 4 rsync …
ss=$?
echo "completion status of last rsync is $ss"
질문을 업데이트한 후 rsync
사용할 명령 은 다음과 같습니다.
rsync -rtlzq -e "ssh -i c:/RsyncKeys/wa-ecy-gov-test-rsync-key -o ConnectTimeout=140 -o ServerAliveInterval=15" --exclude-from='rsyncfilter.txt' --force --delete --log-file=c:/rsynclogs/rsync11-05-2020.log [email protected]: //sdceco/Apps/RSTUDIO/RpackagesNew
다양성
- 45초 동안 서버 응답이 없으면 강제로 연결을 끊는 전송
ServerAliveInterval=15
기능이 추가되었습니다.ssh
- 아니요
-v
(--verbose
) 또는 ( )로 재정의했기--stats
때문입니다 .-q
--quiet
- 아니요 . 전송 수준에서 관리
--timeout
되기 때문입니다.ssh
- 이것지침 복사R 경고의 경우 Windows 파일 시스템에서 이를 바꿔야 할 수도 있습니다
-l
.-L
나는 여기서 그것을 바꾸지 않았지만 당신(그리고 미래의 독자들)은 그것을 알아야 합니다.