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
相关产品推荐
相关产品推荐

