Laravel daily日志已配置permission仍报文件权限错误如何解决?
Laravel daily日志chmod无权限报错解决方案
报错说明
配置daily日志的permission属性后,仍偶尔触发如下报错:
流或文件laravel-2021-08-02.log无法以追加模式打开:chmod(): Operation not permitted
现有配置如下:
'daily' => [ 'driver' => 'daily', 'path' => storage_path('logs/laravel.log'), 'level' => 'debug', 'days' => 7, 'permission' => 0664 ]
根本原因
报错核心是不同进程运行用户的权限不匹配:
- Web请求由
www-data、nginx等Web服务用户执行,而CLI命令、队列任务通常由登录系统用户(如root、普通运维用户)执行 - 若高权限用户先生成了日志文件,后续低权限的Web进程尝试修改文件权限、追加日志时就会触发操作不允许的报错
- 配置的
0664权限仅对新生成的日志文件生效,已存在的旧日志文件不会自动更新权限
修复步骤
- 清空现有权限异常的日志文件:
rm -rf storage/logs/*.log - 统一storage、bootstrap/cache目录的所属用户和用户组,替换为实际的Web服务运行用户,示例以
www-data为例:chown -R www-data:www-data storage/ bootstrap/cache/ - 设置目录基础权限:
chmod -R 775 storage/ bootstrap/cache/ - 你当前配置的
permission参数为八进制格式0664,符合Laravel的要求,无需调整
注意事项
如果使用supervisor托管队列进程,需要在supervisor配置中指定队列进程的运行用户和Web服务用户一致,避免后续队列生成的日志文件再次出现权限不匹配问题。
内容的提问来源于stack exchange,提问作者Ahmed El-Hennawy
相关产品推荐
相关产品推荐

