为什么bash脚本中的这个命令不能在后台运行?

问题描述:

我有一个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

nohup尝试在命令的开头:

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

命令你使用的作品对我来说完全没有问题。唯一可能让人困惑的是脚本结束时你没有得到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

你也可以使用setsid。这对我有效。