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

时间:2011-01-19 15:16:16

标签: bash parallel-processing fork

我有一个包含以下行的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仅在自上次cron作业后崩溃时才启动mplayer)。当作为一个cron工作运行时,没有任何反应......

3 个答案:

答案 0 :(得分:0)

在命令开头尝试使用nohup

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

答案 1 :(得分: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
) &

答案 2 :(得分:0)

您可能也想使用setsid。这对我有用。

相关问题