2012-04-18 36 views
0

我正在研究监听和记录mms流的应用程序;目前我正在用bash脚本为我的老板做一个概念验证。为了记录,我想用Mimms的:在bash中检测挂起的程序

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 

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

回答

2

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

+0

Mimms的同时输出文本 “下载完成!”当它下载了文件的最后部分时,我仍然需要分析mimms的输出来检测下载结束。除了;在一个缓慢而不稳定的网络上(我们说**非常慢),即使文件大小在一段时间内没有增加,也不能保证mimms被挂起。 mimms唯一可靠的反馈是停止输出状态消息 – Iznogood 2012-04-18 22:34:34

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