You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel Dusk生产环境通过代码执行命令失败的解决方案咨询

解决生产环境通过shell_exec执行Dusk命令失败的问题

一、排查shell_exec执行失败的核心原因

1. 检查PHP权限与配置

  • 查看生产环境的php.ini,确认disable_functions中没有shell_exec,如果有则移除该函数后重启PHP服务。
  • 确保PHP运行用户(如www-data)拥有项目目录的读写权限,以及执行php和artisan文件的权限。

2. 修正命令路径问题

生产环境中,shell_exec的工作目录可能不是项目根目录,且PHP路径可能与本地不同:

  • 先用服务器终端执行which php获取PHP绝对路径,再找到项目根目录下artisan的绝对路径,把命令改成绝对路径形式:
    $command = '/usr/bin/php /var/www/your-project/artisan dusk --filter=FetchSingleProductDetailTest';
    
  • 或者先切换到项目根目录再执行命令:
    $command = 'cd /var/www/your-project && php artisan dusk --filter=FetchSingleProductDetailTest';
    

3. 补全环境变量

手动执行时的环境变量与PHP运行时可能不一致,可在命令中指定必要的环境变量:

$command = 'APP_ENV=testing PATH=/usr/local/bin:$PATH php artisan dusk --filter=FetchSingleProductDetailTest';

(根据生产环境实际情况调整APP_ENV和PATH)

二、替代方案:用Laravel原生Artisan门面调用

避免依赖shell_exec,直接用Laravel内置的Artisan门面执行命令,更稳定且无需处理权限/路径问题:

use Illuminate\Support\Facades\Artisan;

// 在你的类函数中
Artisan::call('dusk', [
    '--filter' => 'FetchSingleProductDetailTest',
]);
$output = Artisan::output(); // 获取命令输出

三、关于Pest选项报错的说明

你遇到的The "pest" option does not exist错误,大概率是参考方案中的命令参数与你的Laravel/Dusk/Pest版本不兼容,无需纠结该方案,优先解决shell_exec的核心问题或改用上述Artisan门面调用方式即可。

内容的提问来源于stack exchange,提问作者Hieu Dep Trai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 13:02:34