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

Laravel调度器执行symfony/panther任务失败:Chrome启动报错

解决Laravel调度器运行symfony/panther时Chrome启动失败的问题

问题核心

手动执行reports:get-latest命令正常,但Laravel调度器执行时触发错误:

Could not start chrome. Exit code: 1 (General error). Error output: /system.slice/cron.service is not a snap cgroup

本质原因是:Ubuntu默认通过snap安装的Chrome/Chromium需要在snap专属的cgroup环境下运行,而cron服务的cgroup不属于snap组,导致浏览器无法启动。

解决方案

1. 切换到Deb包版本的Chromium(最稳定方案)

  • 先卸载snap版本的Chromium:
    sudo snap remove chromium
    
  • 安装官方Deb包版本:
    sudo apt update
    sudo apt install chromium-browser chromium-chromedriver
    
  • 在Panther客户端初始化代码中指定Deb版Chromium的二进制文件路径:
    use Symfony\Component\Panther\Client;
    
    $client = Client::createChromeClient(
        null,
        [
            '--no-sandbox',
            '--headless=new',
            '--disable-dev-shm-usage', // 适配AWS实例内存限制
        ],
        [],
        [
            'binary' => '/usr/bin/chromium-browser',
        ]
    );
    

2. 对齐调度器与手动执行的运行环境

  • 指定调度器运行用户:手动执行用的是当前普通用户,而Laravel调度器默认可能用root或www-data,在调度配置中补全用户指定:
    $schedule->command('reports:get-latest')
        ->dailyAt('02:00')
        ->withoutOverlapping()
        ->user('your-ubuntu-username'); // 替换为你手动执行命令的用户
    
  • 检查环境变量:cron的PATH可能不包含chromedriver路径,可在命令类中手动指定驱动路径,或在cron配置中添加PATH环境变量。

3. (可选)调整snap应用的cgroup限制(不推荐)

如果坚持使用snap版本的Chrome,需要修改cron服务的cgroup配置以兼容snap应用,但操作繁琐且易破坏系统稳定性,普通用户不建议尝试。

内容的提问来源于stack exchange,提问作者eComEvo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 08:12:56