Exo*_*imp 5 php symfony laravel laravel-5 artisan
我需要在后台执行一个Laravel长时间运行的进程来使用Twitter Streaming API.有效地我需要运行的php artisan CLI命令是
nohup php artisan startStreaming > /dev/null 2>&1 &
Run Code Online (Sandbox Code Playgroud)
如果我在命令行中自己运行它,那就完美了.
我的想法是,我可以点击网站上的一个按钮,通过执行长时间运行的artisan命令开始流式传输(需要在后台运行,因为Twitter流连接永远不会结束).通过命令行工作正常.
但是以编程方式调用命令不起作用.我试过通过callSilent()从另一个命令静默调用它,并尝试使用Symfony\Component\Process\Process来运行artisan命令或运行一个运行上述命令的shell脚本但我无法弄明白.
更新 如果我对打开流连接的命令进行排队,则会导致队列工作程序的进程超时
我实际上需要一种从PHP类/脚本运行上述命令的方法,但PHP脚本不等待该命令的完成/输出.
非常感谢
Jee*_*usu 11
默认情况下,Symfony Process Component将在当前工作目录中执行提供的命令getcwd()
.
返回的值getcwd()
将不是Laravel安装目录(包含artisan的目录),因此该命令很可能会返回一条artisan: command not found
消息.
在Process Component文档中没有提到它,但如果你看一下类文件,我们可以看到该构造允许我们提供一个目录作为第二个参数.
public function __construct(
$commandline,
$cwd = null,
array $env = null,
$input = null,
$timeout = 60, array
$options = array())
Run Code Online (Sandbox Code Playgroud)
您可以通过在初始化类时提供第二个参数来异步执行所需的命令:
use Symphony\Component\Process\Process;
$process = new Process('php artisan startStreaming > /dev/null 2>&1 &', 'path/to/artisan');
$process->start();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8049 次 |
最近记录: |