无法使用 exec 运行 Laravel Envoy(在命令行中工作但不适用于 Artisan::call)
Can't run Laravel Envoy with exec (works in command line but doesn't with Artisan::call)
我有一个在 Laravel 命令中触发的特使脚本。
php artisan proxy:update
public function handle() {
exec("envoy run update");
}
如果我 运行 在命令行上将其作为 php artisan proxy:update
,它会起作用。
但是,如果我 运行 在我的 Laravel 应用程序中 Artisan::call('proxy:configure');
它不起作用。
在控制台中 whoami
= vagrant;同样在我的命令中 exec('whoami')
也是流浪者。
如果我把它改成
$out = shell_exec('envoy run update');
dd($out);
在命令行中显示输出,但在 Artisan::call()
中,它 returns 空字符串。
能够将 exec()
与 artisan 命令一起使用可能有什么问题?
据我了解,php-fpm 阻止了它。我尝试使用 Symfony 的进程而不是 exec()
,但我被“终止”了。然后我将 Artisan::call()
移动到 Artisan::queue()
并且它起作用了。我很高兴知道是否有人有任何其他解释。
更新:
我创建了一个由 deployer
用户创建的 运行 队列,它具有 sudo 权限(通常是 www-data 运行 我的队列)。现在完美运行了。
我有一个在 Laravel 命令中触发的特使脚本。
php artisan proxy:update
public function handle() {
exec("envoy run update");
}
如果我 运行 在命令行上将其作为 php artisan proxy:update
,它会起作用。
但是,如果我 运行 在我的 Laravel 应用程序中 Artisan::call('proxy:configure');
它不起作用。
在控制台中 whoami
= vagrant;同样在我的命令中 exec('whoami')
也是流浪者。
如果我把它改成
$out = shell_exec('envoy run update');
dd($out);
在命令行中显示输出,但在 Artisan::call()
中,它 returns 空字符串。
能够将 exec()
与 artisan 命令一起使用可能有什么问题?
据我了解,php-fpm 阻止了它。我尝试使用 Symfony 的进程而不是 exec()
,但我被“终止”了。然后我将 Artisan::call()
移动到 Artisan::queue()
并且它起作用了。我很高兴知道是否有人有任何其他解释。
更新:
我创建了一个由 deployer
用户创建的 运行 队列,它具有 sudo 权限(通常是 www-data 运行 我的队列)。现在完美运行了。