gpt4 book ai didi

php - 在后台执行 Laravel/Symfony/Artisan 命令

转载 作者:可可西里 更新时间:2023-11-01 13:42:39 25 4
gpt4 key购买 nike

我需要在后台执行 Laravel 长时间运行的进程以使用 Twitter Streaming API。实际上,我需要运行的 php artisan CLI 命令是

nohup php artisan startStreaming > /dev/null 2>&1 &

如果我自己在命令行中运行它,它会完美运行。

我的想法是,我可以单击网站上的一个按钮,通过执行开始流式传输的长时间运行的 artisan 命令来启动流式传输(需要在后台运行,因为 Twitter 流式传输连接永无止境)。通过命令行工作正常。

但是,以编程方式调用命令不起作用。我尝试通过另一个命令的 callSilent() 静默调用它,并尝试使用 Symfony\Component\Process\Process 运行 artisan 命令或运行运行上述命令的 shell 脚本,但我无法弄清楚.

更新如果我对打开流连接的命令进行排队,它会导致队列 worker 的进程超时

我实际上需要一种方法来从 PHP 类/脚本运行上述命令,但 PHP 脚本不等待该命令的完成/输出。

非常感谢帮助

最佳答案

默认情况下,Symfony 进程组件将在当前工作目录中执行提供的命令,getcwd()

getcwd() 返回的值不会是 Laravel 安装目录(包含 artisan 的目录),所以该命令很可能会返回一个 artisan: command not found 消息。

Process Component documentation 中未提及但如果你看一下class file ,我们可以看到该构造允许我们提供一个目录作为第二个参数。

public function __construct(
$commandline,
$cwd = null,
array $env = null,
$input = null,
$timeout = 60, array
$options = array())

您可以通过在初始化类时提供第二个参数来异步执行所需的命令:

use Symfony\Component\Process\Process;

$process = new Process('php artisan startStreaming > /dev/null 2>&1 &', 'path/to/artisan');
$process->start();

关于php - 在后台执行 Laravel/Symfony/Artisan 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32216857/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com