我在无头Debian 7虚拟机上设置了最新版本的Selenium Server,ChromeDriver和Chrome,通过在Xvfb内运行的Chrome手动运行它。这非常有效,我现在想将其转移到生产Ubuntu 12.04 VM。出于安全考虑,我希望将其作为一个锁定的用户运行,并尽可能靠近守护进程,以便可以无人看管。
我已经编写了一个Fabric脚本来处理部署但是已经陷入了最后的障碍 - 启动Selenium和Xvfb。 Selenium使用自定义.screenrc在Screen内部运行,它也启动Xvfb,但我怀疑DISPLAY变量未正确导出 - 我已将VNC加入帧缓冲区并启动我的RemoteWebDriver项目,该项目连接到Selenium并启动ChromeDriver和Chrome,但Chrome窗口不显示,项目在60秒后超时。我已将以下行添加到selenium-daemon
用户的.bashrc中:
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'
Fabric正在启动屏幕
sudo("screen -dmS selenium -c /home/selenium-darmon/.screenrc & sleep 5", user="selenium-daemon")
我尝试显式设置--rcfile,因为我不确定它是否被使用,但这没有帮助。我很确定这是问题所在;在我的测试VM上我有类似的问题,它通过确保正确设置DISPLAY变量来解决。目前selenium-daemon
用户已被锁定,因此我无法连接到屏幕会话
我还发现从Fabric调用Screen会立即返回;这反过来不知何故停止屏幕启动。我通过上面的sleep
调用解决了这个问题,这使得Screen有足够的时间来创建会话。这是预期的吗?或者这可能与我的问题有关?
手动运行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进行启动。
答案 0 :(得分:2)
也许您可以考虑使用supervisord
代替screen
来管理漫长的流程。