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

CentOS7环境下Laravel因supervisor以root运行引发缓存权限错误求助

解决方案

根因说明

当前问题是由Supervisor管理的Horizon进程以root用户运行,生成的缓存目录/文件属主为root,而Web端运行的Laravel进程使用apache用户,无权限操作root属主的缓存资源,触发权限报错。

最优修复步骤(推荐)

    1. 修改Supervisor的Horizon配置文件,将运行用户改为和Web进程一致的apache
      修改对应配置段的user参数:
[program:api-horizon]
process_name=%(program_name)s
command=php /var/www/html/example.com/artisan horizon
autostart=true
autorestart=true
user=apache # 原root配置改为apache
redirect_stderr=true
stopwaitsecs=86400
    1. 修复已有缓存目录的权限归属,递归修改storage目录属主:
chown -R apache:apache /var/www/html/example.com/storage
    1. 重载Supervisor配置并重启对应进程:
supervisorctl reread
supervisorctl update
supervisorctl restart api-horizon

特殊场景方案(不推荐,仅当必须用root运行Horizon时使用)

如果业务要求Horizon必须以root权限运行,可通过调整权限规则修复:

    1. 将apache用户加入root用户组
usermod -aG root apache
    1. 修改Laravel文件权限配置,编辑config/filesystems.php,调整缓存生成的默认权限,确保同组用户有读写权限:
'disks' => [
    // ...其他原有配置
    'local' => [
        'driver' => 'local',
        'root' => storage_path('app'),
        'permissions' => [
            'file' => 0664,
            'dir' => 0775,
        ],
    ],
    // 同理调整cache相关磁盘配置的权限参数
],
    1. 重启Web服务和Supervisor进程生效

注意:该方案会提升apache用户权限,存在安全风险,非必要不使用。

验证

修复完成后可查看新生成的缓存目录属主是否为apache:apache,触发业务逻辑验证权限报错是否消失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:39:02