问题

问题

我有三个 Ubuntu Upstart 脚本:

  • browser以非特权用户身份运行 Firefox 实例
  • browsersscreen启动 时启动并启动
    • browser PORT=1
    • browser PORT=2
    • browser PORT=3
  • screen启动 Xvfb 服务器

该链条如下:

  1. screen从运行级别 2、3、4、5 启动
  2. browsers配置为start on started screenstop on stopping screen
  3. 每个实例都browser PORT=?将由stop on stopping browsersbrowsers

问题

screen启动正常但无法启动browsers(或者启动成功但browsers无法启动browser PORT=?)。

如果我sudo start browser PORT=1一切正常,而sudo start browsers甚至无法自行启动。

代码

#screen.conf
env DISPLAY=:99
env USER=worker

start on runlevel [2345]
stop on runlevel [!2345]

respawn

script 
        su ${USER} -c "/usr/bin/Xvfb ${DISPLAY}"
end script

#browsers.conf
start on started screen
stop on runlevel [!2345] or stopping screen

respawn

expect fork #the following "start browser ..." do fork

script
       start browser PORT=4242
       start browser PORT=4243
       start browser PORT=4244
       start browser PORT=4245
end script

#browser.conf
instance $PORT

stop on runlevel [!2345]
stop on stopping browsers or stopping screen

respawn

script 
        su ${USER} -c "/usr/bin/firefox -no-remote -P ${PORT} --display ${DISPLAY}"
end script

更新(2010 年 10 月 21 日):上面的(修改后的)代码现在可以正常工作。但是,当我需要时stop browsers,所有的实例browser PORT=?都会正确终止,而“浏览器”会卡住。

我该如何解决这个其他问题?

答案1

Lucid 附带 upstart v0.6.x,这意味着您不能有多个“stop on”或“start on”行。您必须使用and, or& 括号将条件组合在一起。

您可以在 init(5) 手册页中阅读作业描述语法(可在线获取man 5 init或者在终端中运行)。

相关内容