2012-04-18 35 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