Spatie Laravel-backup清理成功但未删除旧备份问题求助
解决spatie/laravel-backup备份清理不生效的问题
1. 先明确默认清理规则的实际逻辑
spatie/laravel-backup 6.x的默认清理配置(config/backup.php的cleanup段)并非单纯保留最近16天备份,而是一套组合策略:
- 最近24小时内,每小时保留1个备份
- 最近7天内,每天保留1个备份
- 最近1个月内,每周保留1个备份
- 最近1年内,每月保留1个备份
- 超过1年的备份全部删除
你提到的“默认保留16天”是对默认配置的误解,若要强制只保留最近16天备份,需自定义清理规则。
2. 自定义清理规则(强制保留16天)
修改config/backup.php中的cleanup配置,替换为单一的按备份时长清理策略:
'cleanup' => [ 'strategy' => \Spatie\Backup\Tasks\Cleanup\Strategies\AgeBasedStrategy::class, 'strategy_config' => [ 'keep_all_backups_for_days' => 16, 'keep_daily_backups_for_days' => 0, 'keep_weekly_backups_for_weeks' => 0, 'keep_monthly_backups_for_months' => 0, 'keep_yearly_backups_for_years' => 0, ], ],
该配置会直接删除所有超过16天的备份,仅保留最近16天内的所有备份文件。
3. 验证命令执行细节
即便收到成功通知,仍需确认清理逻辑是否真的生效:
- 手动执行
php artisan backup:clean --debug,查看输出日志,确认是否触发了旧备份删除操作 - 检查服务器cron日志(通常在
/var/log/cron或/var/log/syslog),确认schedule:run每分钟正常执行,且backup:clean无执行报错 - 查看
storage/app/Laravel下备份文件的修改时间,手动执行clean后对比文件数量变化
4. 检查存储目录权限
确保Laravel存储目录有足够权限让服务器用户(通常为www-data或nginx)删除文件:
chown -R www-data:www-data storage/app/Laravel chmod -R 755 storage/app/Laravel
5. 确认备份通知的准确性
部分情况下,成功通知仅代表命令执行完成,不代表清理逻辑实际删除了文件。手动执行backup:clean后,直接查看存储目录的文件数量,确认是否有旧备份被移除。
内容的提问来源于stack exchange,提问作者Taten
相关产品推荐
相关产品推荐

