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 36001時間後に別の方法で終了. つまり、次のようになります。

#!/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
    

それで、頑張ってください!

詳細はお気軽に追加してください。

関連情報