私はcronジョブを使用して、wgetの非常に単純な呼び出しであるシェルスクリプトを実行します。そのような例の1つを次に示します。
#!/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にスローできるスイッチがあれば、私ははるかに、はるかに、はるかに幸せになります。
何か案は?
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
を組み込んですべてを同じファイルに入れることもできますが、そうすると、中断がいくつ発生したか、いつ発生したかを簡単に診断できなくなります。
さて、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
のみ works (-cオプションの下の最後の行を参照)FTPサーバーとHTTP servers that support the Range header
、そしてあなたの場合はHTTPです。
http://playerservices.streamtheworld.com/api/livestream-redirect/WRTI_JAZZ.mp3
だから、それで頑張ってください!
詳細はお気軽に追加してください。