2011-01-19 76 views
0

我有一個bash腳本,包括下面幾行:爲什麼bash腳本中的這個命令不能在後臺運行?

. 
    . 
    if [ -z "$(pgrep mplayer)" ]; then 
     /usr/bin/mplayer -slave -input file=/home/administrator/files/mplayer-control.pipe http:/www.musicserveraddress.com/ & 
    fi 
    . 
    . 
    Other things to execute 
    . 
    exit 

發生的事情是mplayer的連接到streamingserver並開始播放流。但是,腳本永遠不會移動。我添加了一個&符號將這個過程移動到後臺,這樣腳本應該繼續運行,然後退出(保持音頻流播放)。

我該怎麼做才能做到這一點? 在此先感謝/ J

編輯:它從命令行運行腳本時按計劃運行,但它旨在作爲cron作業運行(並且pgrep僅用於啓動mplayer自上次cron作業以來墜毀)。當作爲cron作業運行,沒有任何反應......

+0

我很肯定你有一些東西你必須在開始 – 2011-01-19 15:19:30

回答

0

nohup嘗試在命令的開頭:

nohup /usr/bin/mplayer -slave -input file=/home/administrator/files/mplayer-control.pipe http:/www.musicserveraddress.com/ & 
0

命令你使用的作品對我來說完全沒有問題。唯一可能讓人困惑的是腳本結束時你沒有得到bash提示符,但它實際上在那裏,請嘗試按Enter鍵。

當你想讓玩家通過管道進行控制,並在後臺,我建議以標準流從控制檯重定向,以及和所有輸出發送到一個日誌文件:

(
    exec </dev/null 
    exec >/dev/null 
    exec 2>/dev/null 

    umask 0 
    cd/

    exec setsid mplayer -slave -idle -input /home/user/control.pipe http://server.com > /var/log/mplayer.log 2>&1 
) & 
+0

現在它適用於我從命令行運行,但不是作爲我打算使用它的cron作業。 (請參閱我上面的編輯)。 – Julio 2011-01-20 20:37:33

0

你也可以使用setsid。這對我有效。

相關問題