rsync 재시도 사이에 고정 시간 설정

rsync 재시도 사이에 고정 시간 설정

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나는 여기서 그것을 바꾸지 않았지만 당신(그리고 미래의 독자들)은 그것을 알아야 합니다.

관련 정보