xvfb-run在shell中工作但在从php exec()命令运行时不能工作

时间:2017-10-10 19:56:28

标签: php nightmare

我试图让nightmarejs在我的centos服务器上运行,并且能够通过运行xvfb-run来实现,但我需要通过php exec()函数调用此命令。

当我这样做时,我只是得到一个空洞的结果,好像它不起作用?

当我通过命令行运行它(即xvfb-run node my-script.js)时,一切都很好。知道为什么它似乎无法工作或可用于我的PHP脚本吗?

2 个答案:

答案 0 :(得分:0)

好的,我想通了。基本上,必须为xvfb-run授予sudo访问权限才能通过php中的可执行脚本调用它。为此,请登录终端并执行以下操作:

# sudo visudo

确保轮组未取消注释

%wheel  ALL=(ALL)       ALL

这意味着添加到wheel组的用户可以访问调用sudo命令

在文件底部,授予您的用户访问脚本

的权限
YOUR_USER ALL = NOPASSWD: /usr/bin/xvfb-run

保存文件并将用户添加到滚轮组

usermod -aG wheel YOUR_USER

最后,从您的php脚本中,您现在可以通过sudo

调用xvfb-run
<?php exec('sudo xvfb-run node my-script.js'); ?>

答案 1 :(得分:0)

尽管Cono的答案确实有用,但它的安全性较低,因为它赋予YOUR_USER访问wheel的权限,从而使YOUR_USER成为管理员。

相反,请在/etc/sudoers.d(RHEL / CentOS)中创建一个文件,其内容如下:(假定YOUR_USER是apache)

# Allow apache to run xvfb-run

Defaults:apache !requiretty
Defaults:apache visiblepw

apache ALL = NOPASSWD: /usr/bin/xvfb-run

这样,如果apache用户受到威胁,他们只能运行xvfb-run命令。

(感谢ThirdNode)