PHP exec运算符不执行特定命令

时间:2013-03-06 13:25:20

标签: php process permissions exec shell-exec

我的一行shell命令没有执行,尽管其他类似的行工作。我使用基于Ubuntu 12.04的操作系统在linux机器上运行。我也尝试过使用exec,但仍然无法正常工作。

我实际上已经在某个时候工作了,我遇到了悬挂问题(等待命令输出),这就是我将输出重定向到/ dev / null的原因。所以在开发中的某些地方发生了变化。我们确实创建了一个debian软件包来安装,我运行了这个安装包,所以我想可能在覆盖文件时权限已经改变所以我添加了读/写/执行给所有用户/组/所有者,但是这些都没有用

代码在这里:

if(isset($_POST['activateXML']))
{
    if (videoConsistencyCheck())
    {
        `cp {$fileXML} /apps/video/xml.xml`;
        `sudo /apps/video/vsss restart >/dev/null 2>&1 &`;
        systemUnvalidate();
        header('Location: index.php?app='.$_GET['app']);
        die();
    }
}

我知道if语句中的第一行会被执行。代码行在实际终端中工作正常,所以这也不是问题。我做了很多谷歌搜索,我所能找到的是一个悬而未决的问题,任何建议都会有所帮助。

编辑:所以似乎无法正常工作实际上是按预期调用命令,但在bash脚本中我调用了启动 - 停止守护进程无法正常工作

编辑2:我制作了一个测试php文件并从终端运行代码,通过在命令中添加sudo修复了start-stop-daemon错误,但它仍然无法在我的代码中运行。我在按下提交按钮时调用此代码。

2 个答案:

答案 0 :(得分:0)

使用其他参数,尤其是输出: EXEC($命令,$输出); 的var_dump($输出); 确定你的命令可能出错。如果它不起作用,请告诉我们您使用执行官的代码。

答案 1 :(得分:0)

问题在于调用vsss脚本中的二进制文件,该文件只能以root身份运行。我们不希望只允许任何人访问该二进制文件。我们提出的解决方案涉及在vsss脚本上调用chmod + s,该脚本允许用户和组ID的权限,但保留其所有者权限。然后,我们使用NOPASSWD参数将PHP用户(即www-data)添加到sudoers文件中。在我的PHP代码中,我使用了以下行:

exec('sudo /apps/video/vsss restart >/dev/null 2>&1 &')

shell_exec() /反引号不适用于此方法。