我有三个 Ubuntu Upstart 脚本:
browser
以非特权用户身份运行 Firefox 实例browsers
screen
启动 时启动并启动browser PORT=1
browser PORT=2
browser PORT=3
screen
启动 Xvfb 服务器
该链条如下:
screen
从运行级别 2、3、4、5 启动browsers
配置为start on started screen
并stop on stopping screen
- 每个实例都
browser PORT=?
将由stop on stopping browsers
browsers
问题
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
或者在终端中运行)。