Laravel 10应用Ubuntu服务器缓存文件打开失败排查求助
调试思路
1. 排查缓存驱动问题
- 先确认
.env中CACHE_DRIVER是否为默认的file,临时切换为array驱动(仅用于测试,不适合生产环境),观察2小时后是否复现问题:CACHE_DRIVER=array - 若切换后问题消失,说明文件缓存的生命周期管理存在异常;若仍出现问题,需排查业务代码中的缓存逻辑。
2. 监控缓存文件变化
- 创建监控脚本
monitor_cache.sh跟踪缓存目录的文件状态:#!/bin/bash while true; do date >> /var/log/cache_monitor.log ls -la /var/laravel-project/storage/framework/cache/data >> /var/log/cache_monitor.log sleep 3600 # 每小时记录一次 done - 赋予执行权限并后台运行:
chmod +x monitor_cache.sh nohup ./monitor_cache.sh & - 问题复现时,对比日志查看目标缓存文件是被提前删除,还是从未创建。
3. 检查系统自动清理机制
- 排查服务器是否有
tmpwatch、systemd-tmpfiles-clean等自动清理服务,这类服务可能误删Laravel缓存文件:- 查看
tmpwatch配置:cat /etc/cron.daily/tmpwatch - 查看
systemd-tmpfiles规则:cat /usr/lib/tmpfiles.d/*.conf | grep -E '(storage|cache)'
- 查看
- 若发现规则包含
storage/framework/cache目录,修改规则排除该路径。
4. 核对缓存过期配置
- 检查
.env中CACHE_TTL是否设置过短,或代码中是否存在手动设置极短缓存时效的逻辑:CACHE_TTL=3600 # 默认3600秒,确认未被修改为7200以内的值 - 搜索项目代码,排查是否有类似
Cache::put('key', 'value', 300);这类短时效缓存操作,尤其是认证相关的缓存逻辑。
5. 确认进程权限与文件所有者匹配
- 虽然已设置777权限,仍需确认PHP-FPM/Web服务器(Nginx/Apache)的运行用户与项目文件所有者是否一致:
- 查看PHP-FPM运行用户:
ps aux | grep php-fpm - 查看项目目录所有者:
ls -ld /var/laravel-project
- 查看PHP-FPM运行用户:
- 若不一致,修正权限(推荐
chown -R www-data:www-data /var/laravel-project,再给storage目录设置775权限),避免文件创建后因权限问题无法访问。
6. 启用Laravel缓存日志
- 修改
config/logging.php,新增缓存专用日志通道:'cache' => [ 'driver' => 'single', 'path' => storage_path('logs/cache.log'), 'level' => 'debug', ], - 在
.env中设置LOG_CHANNEL=stack,并将cache通道加入stack配置:'stack' => [ 'driver' => 'stack', 'channels' => ['single', 'cache'], 'ignore_exceptions' => false, ], - 问题复现时,查看
storage/logs/cache.log,分析缓存的创建、读取、删除操作是否存在异常。
7. 检查文件系统一致性
- 运行文件系统检查,确认存储项目的磁盘是否存在IO错误或文件系统损坏:
fsck /dev/your-disk-partition - 注意:执行前需卸载分区或进入单用户模式,避免损坏数据。
内容的提问来源于stack exchange,提问作者user3412802
相关产品推荐
相关产品推荐

