我试图在一个无头服务器上执行火狐来获取一个网站的屏幕截图。
“DISPLAY=:12 firefox -saveimage http://www.google.com/“.
问题是当我尝试做系统(“DISPLAY=:12 firefox -saveimage http://www.google.com”);不起作用。我有一种感觉,它不是在正常的shell环境中执行的。我违背了我更好的判断,给了apache用户一个实际的shell。如果我su到apache并执行命令,一切都很好,并按预期工作,但再次从系统调用它不起作用。任何见解都是非常受欢迎的。
3条答案
按热度按时间kjthegm61#
我找到解决办法了。
我只需要创建一个shell脚本来调用它,在玩了一段时间后,我在脚本的顶部添加了
export HOME="/var/www/"
,它就可以工作了。我希望这对其他人有帮助。
00jrzges2#
最有可能的是,httpd的环境没有满足您作为shell用户设置的环境变量的一些依赖性。在对环境进行任何英勇的操作之前,我建议从您的作业中捕获stderr(例如,通过将**
2>/tmp/imgcaperrlog
**添加到它的末尾),看看它是否有任何抱怨。z31licg03#
经过几个小时的研究,我得到了它的工作,我有同样的问题与Xvfb和xfreerdp。似乎apache 2 mod_php不设置一个家庭用户www-data,所以从URL调用php脚本,使xfreerdp崩溃,导致它需要写入到~/.config/freerdp目录。通过另一端,调用它从php CLI工作,因为 shell 已经有一个家庭设置在环境中。
不使用外部shell脚本,我得到它的工作原理:
我添加
-nolisten unix
是为了避免用户www-data创建/tmp/.X11-unix/
文件夹。该目录应该归root所有。(在我的例子中,我不需要Xvfb侦听套接字)@威廉非常感谢你的输入,你保存了我。