![WGET: HTTP URL 다운로드를 자동으로 재개할 수 있나요?](https://rvso.com/image/1557623/WGET%3A%20HTTP%20URL%20%EB%8B%A4%EC%9A%B4%EB%A1%9C%EB%93%9C%EB%A5%BC%20%EC%9E%90%EB%8F%99%EC%9C%BC%EB%A1%9C%20%EC%9E%AC%EA%B0%9C%ED%95%A0%20%EC%88%98%20%EC%9E%88%EB%82%98%EC%9A%94%3F.png)
나는 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
그럼 행운을 빕니다!
자세한 내용을 추가해 보세요.