我正在开发一个用于收听和录制mms流的应用程序;目前我正在用bash脚本为我的老板做一个概念验证。要录制,我想使用mimms:
mimms <mms://url> download_to_file
mimms的输出是:
connecting
<mms://url> <=> download_to_file
1MB / 10 MB (20 kB/s, 00:01:30 remaining)
最后一行是状态消息,每秒更新一次。
处理不稳定的网络时会出现问题。当网络退出时,mimms将挂起。没有向download_to_file添加新数据(文件大小是常量,并且不会增加),但是mimms不会退出,并且在重新建立网络连接时甚至不会恢复下载。它只是挂起,也不输出新的状态消息行。
我想在没有从mimms输出新行,杀死mimms并恢复下载时检测到它:
mimms -r mms://url download_to_file
但我不知道如何测试这些条件,并非常感谢如何处理这个问题的建议。
答案 0 :(得分:2)
您可以在后台启动mimms(通过向命令添加&
)并让您的脚本循环等待,定期检查下载文件的大小。如果mimms仍在运行但文件大小没有改变,则假设mimms挂起并将其终止。
答案 1 :(得分:0)
我自己想出了一个解决方案,它依赖于mimms的输出而不是mimms生成的文件的大小:
重复此操作直到mimms输出“Download complete!”
LAST1="a"
LAST2="b"
MSG="Starting download of $PATH1"
until [ "$LAST1" = "Download complete!" ]; do
echo $MSG
mimms -r $URL "$PATH1" >> log 2>&1 &
PID=$!
echo $PID
until [ "$LAST1" = "$LAST2" ]; do
LAST2="$LAST1"
sleep 60
LAST1=$(tail -1 log)
echo "$LAST1"
done
kill $PID
MSG="Download incomplete. Retry..."
done