1

我正在开发一个用于收听和录制彩信流的应用程序;目前我正在用 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

但我不知道如何测试这些条件,并且非常感谢有关如何处理这个问题的建议。

4

2 回答 2

2

您可以在后台启动 mimms(通过将 a 添加&到命令中)并让您的脚本循环等待,定期检查下载文件的大小。如果 mimms 仍在运行但文件大小没有改变,假设 mimms 已挂起并终止它。

于 2012-04-18T22:22:35.253 回答
0

我自己想出了一个解决方案,它依赖于 mimms 的输出,而不是 mimms 生成的文件的大小:

  1. 在后台启动程序,将输出从 mimms 重定向到日志文件
  2. 定期读取该文件的最后一行
  3. 如果同一行连续出现两次,杀死 mimms 并重新启动它
  4. 重复此操作,直到 mimms 输出“下载完成!”

    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
    
于 2012-05-01T22:43:02.207 回答