wget과의 연결을 다시 시도하는 방법?


29

인터넷 연결이 매우 불안정하여 200MB 정도의 파일을 다운로드해야하는 경우가 있습니다.

문제는 속도가 자주 떨어지고 제자리에 --, -K/s있으며 프로세스가 계속 작동한다는 것입니다. 프로세스에 KILL 신호를 보내려고 생각했지만 wget 매뉴얼에서 신호에 대해 읽으면 도움이되지 않습니다.

wget연결을 끊고 다시 시작된 후 중단 된 부분을 다시 초기화하고 강제 로 다시 초기화하려면 어떻게 해야합니까?

나는 wget달리기를하고 싶다. 그리고 돌아 왔을 때, 나는 그것을 다운로드하고 속도를 기다리지 않고 싶다 --,-K/s.

답변:


47

--, -K/s상황 을 피하기 위해 사용할 수 있습니다 --read-timeout=seconds. 몇 초 후에 연결 시간이 초과됩니다.

그 이상으로 넘어 가야 할 경우이 설정을 사용할 수 있습니다

wget --retry-connrefused --waitretry=1 --read-timeout=20 --timeout=15 -t 0

연결 거부 및 유사한 치명적 오류 ( --retry-connrefused)를 재 시도하고 다음 재시도 (1) ​​전에 1 --waitretry초 동안 기다립니다. 데이터가 수신되지 않은 경우 최대 20 초 동안 기다렸다가 다시 시도합니다 ( --read-timeout), 최대 15 초 기다립니다 초기 연결 시간이 초과되기 전에 ( --timeout) 마지막으로 무한 횟수 ( -t 0)를 다시 시도합니다 .

while로컬 네트워크 장애 및 이와 유사한 것을 피하기 위해 이것을 루프에 넣을 수도 있습니다 . 이 경우 --continue중단 한 부분에서 다운로드를 계속하려면 추가해야합니다 . 다음은 Bash에서 잘 작동합니다.

while [ 1 ]; do
    wget --retry-connrefused --waitretry=1 --read-timeout=20 --timeout=15 -t 0 --continue
    if [ $? = 0 ]; then break; fi; # check return value, break if successful (0)
    sleep 1s;
done;

보너스 팁으로 --no-dns-cache호스트가 DNS를 통해 여러 서버간에 요청의 균형을 맞추는 경우 에도 사용할 수 있습니다 .

면책 조항 : 연결이 불안정하고 모니터하지 않은 상태로 두는 것이 현명하지 않은 경우 호스트를 스팸으로 만들기 때문에 이것을 사용하지 않는 것이 좋습니다. 그러나 이것은 실제로 무언가를 다운로드해야하고 연결이 제대로 작동하지 않는 경우에 원하는 것입니다.


2
기본적으로 --read-timeout=900. 15 분만 기다리면 wget이 다운로드를 다시 시작합니다.
보리스

이 "재시도"도움말에 감사하지만 wget은 SSL 연결을 설정할 수 없기 때문에 여전히 100 % 작동하지 않습니다. 해당 오류를 재 시도하지 않습니다. 재생하려면 pkg.jenkins.io/debian/jenkins.io.key를 가져 오십시오
Juraj Michalak

20

--tries=number

이 옵션은 재시도 횟수를 숫자로 설정합니다. 무한 재 시도를하려면 0 또는 'inf'를 지정하십시오.

wget --tries=70 http://example.com/myfile.zip 해야합니다.

재 시도 되지 않은 "연결 거부"또는 "찾을 수 없음"(404)과 같은 치명적인 오류를 제외하고 기본값은 20 번 재 시도됩니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.