为什么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作业运行,没有任何反应......
答
与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。这对我有效。
我很肯定你有一些东西你必须在开始 – 2011-01-19 15:19:30