0

尽管其他类似的行在工作,但我的其中一行 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 错误,但它在我的代码中仍然不起作用。当按下提交按钮时,我正在调用此代码。

4

2 回答 2

0

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

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

/ backticksshell_exec()不适用于此方法。

于 2013-03-06T19:21:00.477 回答
0

使用附加参数,尤其是输出: exec($command,$output); var_dump($输出); 以确定您的命令可能有什么问题。如果它不起作用,请向我们展示您使用 exec 的代码。

于 2013-03-06T13:42:42.593 回答