Low*_*ter 2 linux download wget cron
我使用 cron 作业来执行 shell 脚本,这些脚本是对 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."
Run Code Online (Sandbox Code Playgroud)
这是一个互联网广播流。我的问题是,虽然这工作正常,但有时流经常被“中断”(尽我所知)并且我最终会得到一个被截断的流副本。如果有一个开关,我可以扔给 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."
Run Code Online (Sandbox Code Playgroud)
正如所写,这会在每次中断后启动一个新文件。您也可以合并wget -c
以将所有内容放入同一个文件中,但是您将无法轻松诊断有多少中断以及它们何时发生。
归档时间: |
|
查看次数: |
3034 次 |
最近记录: |