我的一行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错误,但它仍然无法在我的代码中运行。我在按下提交按钮时调用此代码。答案 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()
/反引号不适用于此方法。