PHP执行命令并记录输出但不等待

10

我使用exec()来执行命令,无论是linux还是windows。

如何在linux和windows上执行命令并记录输出而不等待?

我知道在linux上,不等待输出的方法是:command* > /dev/null 2>/dev/null &

要记录linux上的输出:command* > /path/to/log.txt 2>/path/to/error.txt

如何用一个命令同时记录输出并将其设置为后台运行?在windows中有什么类似的方法?


1
您可以使用exec()函数将输出重定向到文件中,然后稍后通过PHP读取该文件。 - ametren
1
结尾的&可以将事物放在后台运行。但这在Windows系统下不起作用,只适用于Linux系统。 - hakre
在Windows中,我相信你只需要使用start命令。 - ametren
1个回答

23
在Linux上,您可以执行以下操作:

exec('command* > /dev/null 2>/dev/null &');

在Windows上,你可以这样做:

pclose(popen('start /B cmd /C "command* >NUL 2>NUL"', 'r'));

这两个示例都禁用输出和错误信息,它们会被重定向到 /dev/null(Linux)或 NUL(Windows),这意味着它们不会被存储在任何地方。

你可以将其替换为系统上的有效路径。

在 Linux 上,末尾的 & 将其置于后台运行。在 Windows 上需要使用 start 来调用进程和 cmd 来允许流的重定向。


2
你可以将输出定向到一个文件,然后使用fopen/!feof打开日志文件。 - Mike Mackintosh
在Linux中,您如何一次性记录并将其设置为后台运行? - user1105430
@user1105430:那个问题已经在回答中得到了解答。请查看第一行。 - hakre
@hakre 我可以使用 "command* > /path/to/log.txt 2>/path/to/error.txt &" 吗? - user1105430
没有明确提到,但是你必须用你的命令替换整个 command*(包括 *)。如果你保留 *,它将无法工作。 - CodiMech25
正确,星号表示通配符。请随意替换命令,但要注意放松控制字符等。 - Mike Mackintosh

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