归档日期:2026-10-27;补录发布:2026-10-28。
日志帮助排错,也会持续占磁盘。直接删除正在写的日志不一定释放空间,因为程序可能仍持有文件描述符,排查证据却先丢了。
轮转做什么
Logrotate 按策略改名和保留历史日志,再让应用写入新文件。规则通常在 /etc/logrotate.d/,全局入口常见为 /etc/logrotate.conf。先查看已有规则,避免同一文件重复配置。
下面只是结构示例,不是本站新增配置:
/var/log/example-app/*.log {
daily
rotate 14
compress
delaycompress
missingok
notifempty
create 0640 example example
}daily 表示按日判断轮转条件,rotate 14 表示保留指定数量的副本。compress 压缩旧日志;delaycompress 将最近一份历史文件的压缩推迟。missingok 容许日志不存在,notifempty 避免空文件也轮转。
create 的用户组必须与应用匹配,example 是占位账号,不能原样用于生产。
改名以后应用知道吗
一些应用继续写旧文件,因此还需要 postrotate 通知重新打开日志。Nginx 有相应信号机制,其他程序可能不同,不能给所有程序统一发同一种信号。
copytruncate 先复制再截断,适合某些不能重新打开日志的程序,但复制与截断之间存在丢日志窗口,不是零风险替代方案。
先只读调试
logrotate -d /etc/logrotate.conf
journalctl --disk-usage-d 只显示调试信息,不实际轮转或更新状态。-f 会强制轮转并改变文件,不能当作无影响测试。
验收不只看压缩包
先估算每天增长量,再决定保留周期。访问、错误、审计日志可能需要不同策略。已丢弃的访问记录无法凭空还原成访客报表。
验收应同时确认应用写入新日志、历史文件可读、权限正确、磁盘增长受控,不能只看到一个 .gz 就结束。
补全重新打开日志的验证
对于由 systemd 管理、支持相应操作的 Nginx,可以在核对原有包规则后使用 USR1 通知重新打开日志;不是所有服务都接受这个信号。轮转后发一条测试请求,检查新 access.log 修改时间和内容,并确认历史文件停止增长。daily 是调度检查条件,不保证调度器停止期间仍每天自动轮转;先核对 logrotate timer 或 cron。
内容复核与修订:2026-10-29。实验示例与本站运行记录分别说明;原始归档日期保留。
评论 (0)