WGET: HTTP URL 다운로드를 자동으로 재개할 수 있나요?

WGET: HTTP URL 다운로드를 자동으로 재개할 수 있나요?

나는 cron 작업을 사용하여 wget을 매우 간단하게 호출하는 쉘 스크립트를 실행합니다. 다음은 그러한 예 중 하나입니다.

#!/bin/sh
fileName="WRTI-"$(date +"%m-%d-%Y-%H%M")
directory=/volume1/multimedia/Internet\ Radio\ Recordings/WRTI/$1/

wget http://playerservices.streamtheworld.com/api/livestream-redirect/WRTI_JAZZ.mp3 -O "$directory$fileName.mp3" -q&
nWgetPID=$!

sleep 3600

kill $nWgetPID

echo "Done."

이것은 인터넷 라디오 스트림입니다. 내 문제는 이것이 잘 작동하지만 스트림이 "중단"되는 경우가 매우 자주 발생하여(내가 알 수 있는 한) 스트림의 잘린 복사본으로 끝나는 것입니다. WGET에 "중단 후 자동으로 재개"라고 말할 수 있는 스위치가 있다면 훨씬, 훨씬, 훨씬, 훨씬 더 행복할 것입니다.

어떤 아이디어가 있나요?

답변1

C0deDaedalus가 쓴 것처럼 wget -c"Range" 헤더를 전송하여 부분적으로 다운로드된 파일 다운로드를 재개하는 것을 의미합니다. 실시간 인터넷 스트림을 처리하고 있으므로 이 플래그는 의도한 대로 작동하지 않습니다. 기껏해야 스트림이 중단되었을 때 청크가 손실되었다는 사실을 무시하고 동일한 다운로드 파일에 스트림을 계속 추가할 수 있으며 기껏해야 누락된 청크가 MP3 플레이어에 문제를 일으키지 않을 것입니다.

그럼에도 불구하고 다른 문제도 있는 것 같습니다. 스크립트가 실제로감지하다프로세스가 너무 빨리 종료 되면 wget다운로드를 재개하려고 시도할 수도 있습니다. 의 종료 상태를 사용하여 프로세스가 종료되었는지 여부를 감지하는 방법은 다음과 같습니다 kill -0. 즉, 둘 중 하나를 사용할 수 없으므로 sleep 3600다음이 필요합니다.1시간 후에 끝내는 다른 방법. 그래서 당신은 다음과 같은 것을 갖게 될 것입니다 :

#!/usr/bin/bash
directory=/volume1/multimedia/Internet\ Radio\ Recordings/WRTI/$1/
endSeconds=$((SECONDS + 3600))

while [ $SECONDS -lt $endSeconds ]; do
    fileName="WRTI-"$(date +"%m-%d-%Y-%H%M%S")
    wget http://playerservices.streamtheworld.com/api/livestream-redirect/WRTI_JAZZ.mp3 -O "$directory$fileName.mp3" -q&
    nWgetPID=$!

    while kill -0 "$nWgetPID" >/dev/null 2>&1; do
        if [ $SECONDS -gt $endSeconds ]
        then
            kill "$nWgetPID"
        fi
        sleep 1
    done
done

echo "Done."

작성된 대로 이는 중단될 때마다 새 파일을 시작합니다. 모든 것을 동일한 파일에 넣기 위해 통합할 수도 있지만 wget -c그렇게 하면 중단 횟수와 중단 시간이 언제 발생했는지 쉽게 진단할 수 없습니다.

답변2

음, 중단된 다운로드를 계속하려면 다음을 wget사용할 수 있습니다.-c계속한다는 뜻의 옵션입니다.

wget -c http://playerservices.streamtheworld.com/api/livestream-redirect/WRTI_JAZZ.mp3 -O "$directory$fileName.mp3" -q

여기에 몇 가지 사항이 있습니다.

  • 로컬 시스템에 파일을 부분적으로 다운로드했다고 가정합니다.
  • 이전 호출의 다운로드 파일이 비어 있으면 계속 진행이 거부됩니다. 이 경우 먼저 빈 파일을 제거해야 합니다.
  • 를 사용하는 동안 -c로컬보다 서버에 있는 파일이 더 큰 경우 불완전한 다운로드로 간주되어

    (length(remote) - length(local)) bytes
    

    다운로드되어 로컬 파일의 끝에 추가됩니다.

  • Important

    -c오직공장(-c 옵션 아래의 마지막 줄 참조) FTP 서버와 HTTP servers that support the Range header귀하의 경우에는 HTTP입니다.

    http://playerservices.streamtheworld.com/api/livestream-redirect/WRTI_JAZZ.mp3
    

그럼 행운을 빕니다!

자세한 내용을 추가해 보세요.

관련 정보