在Linux中运行"last"命令

3

我正在尝试在PHP中执行Linux命令,以下是我的示例代码:

$command = "last -F";
$o = shell_exec($command);
print_r($o);

大多数 Linux 命令会输出内容,但 Last -F 命令没有输出。为什么会这样?


1
你确定你有正确的权限吗? - Mohammad Tomaraei
很可能是权限问题。这对我来说运行良好。 - Amal Murali
你如何更改权限以使PHP脚本执行该命令? - cocoboy
这取决于您如何执行脚本。如果是CLI,则使用执行此命令的用户(因此该用户应具有适当的权限)。如果您从Web浏览器执行此脚本,则最可能使用名为www-data的用户。然后,您应该为此用户授予适当的权限。 - nikita2206
2个回答

0

您正在以Web用户(nobodywww-data)的身份执行该命令,这是一个有限特权用户。您必须以root身份执行该命令。不幸的是,给予Web用户sudo权限或完全权限真的是一个糟糕的主意。因此,我建议创建一个cron或后台脚本来执行last -F并将输出写入文件。您可以从PHP脚本中读取该文件。

您可以像这样创建一个在后台运行的脚本。

   #!/bin/bash

    while [ true ]; do
         last -F > /tmp/myfile
    done

将代码保存为 mycron.sh

chmod +x mycron.sh
mycron.sh &

从你的PHP程序中读取文件/tmp/myfile,它将给出该命令的确切输出。


0

尝试这个解释。你的问题可能是last -F的最后一行是一个新行。 shell_exec()只返回命令的最后一行,因此,如果该行为空,则什么也不会返回。

作为替代方案,请尝试使用exec(),这将允许您捕获返回值(执行成功或失败)以及命令的全部输出。在这里查看它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接