2014-02-06 38 views
0

我在无头Debian 7虚拟机上设置了Selenium Server,ChromeDriver和Chrome的最新版本,通过在Xvfb内运行Chrome的屏幕手动运行它。这工作得很好,现在我想将其转移到生产Ubuntu 12.04 VM。为了安全起见,我想将它作为锁定用户运行,并尽可能靠近守护进程,以便可以无人照管。
我已经写了一个Fabric脚本来处理部署,但已经落在最后一关 - 启动Selenium和Xvfb。 Selenium使用自定义的.screenrc运行,该自定义的.screenrc也启动Xvfb,但我怀疑DISPLAY变量没有被正确导出 - 我已经将VNC加入了framebuffer并启动了我的RemoteWebDriver项目,该项目连接到Selenium并启动ChromeDriver, Chrome,但Chrome窗口未显示,并且项目在60秒后超时。我已经添加了以下行的.bashrc为selenium-daemon用户:Selenium ChromeDriver - 如何以守护进程运行并部署?

export DISPLAY=:10 

,并在.screenrc:

screen -t 'Xvfb' 0 /usr/bin/Xvfb :10 -screen 0 1366x768x24 -ac 
screen -t 'Selenium' 1 /bin/bash --rcfile /home/selenium-daemon/.bashrc -c '/usr/bin/java -jar /usr/local/bin/selenium-server-standalone-2.39.0.jar -Dwebdriver.chrome.driver=/usr/local/bin/chromedriver -port 4444 > /tmp/selenium.log' 

屏幕正在拉开序幕通过面料与

sudo("screen -dmS selenium -c /home/selenium-darmon/.screenrc & sleep 5", user="selenium-daemon") 

我试着明确地设置--rc文件,因为我不确定它是否被使用,但这并没有帮助。我确信这是问题所在;在我的测试虚拟机上,我遇到了类似的问题,并通过确保DISPLAY变量设置正确来解决问题。目前selenium-daemon用户被锁定,因此我无法连接到屏幕会话。
我还发现,从织物调用屏幕立即返回;这反过来阻止了屏幕的启动。我在上面调用sleep来解决它,它允许屏幕有足够的时间来创建会话。这是预期的吗?或者这可能与我的问题有关吗?
手动运行Fabric/Screen命令不能解决问题,即使它们是根据我在测试VM上使用的命令进行调整的。任何指针?
作为事后的想法,我也想能够启动附加到Xvfb的x11vnc服务器,但是如果我在.screenrc中对其进行了工作调用,则它完全无法显示。甚至称sleep启动不启动它之前:

screen -t VNC 2 /usr/bin/x11vnc -display :10 -bg -nopw -xkb -listen 127.0.0.1 

编辑:我想我固定VNC问题,复制粘贴命令通常是一个贫穷的想法!回到并改变了一些旗帜:

screen -t VNC 2 /usr/bin/x11vnc -display WAIT:10 -nopw -xkb -forever -shared -listen 127.0.0.1 -logfile /tmp/x11vnc.log 

更成功。我已经让ChromeDriver手动启动,现在正在调查是否可以使用Fabric启动它。

回答

2

也许你可以考虑使用supervisord而不是screen来管理你的长时间运行的进程。

+0

完美!正是我需要的!感谢这个建议,我现在已经开始工作了(不需要给'selenium-daemon'一个shell!),并且这应该很容易编写脚本。非常感激。 – Gargravarr