私は 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
それで、頑張ってください!
詳細はお気軽に追加してください。