在 Debian 中,**日志轮转(log rotation)**通常由 logrotate 工具完成。下面从「原理 → 配置位置 → 常用参数 → 示例 → 调试命令」系统讲一下。
logrotate 由 cron / systemd timer 定期调用(通常每天一次)/etc/logrotate.conf
/etc/logrotate.d/
⚠️ 实际服务(nginx、rsyslog、apt 等)的轮转规则都在
/etc/logrotate.d/
| 参数 | 作用 |
|---|---|
daily / weekly / monthly |
轮转周期 |
rotate N |
保留 N 个旧日志 |
size 100M |
日志达到大小后轮转 |
missingok |
日志不存在不报错 |
notifempty |
空日志不轮转 |
compress |
压缩旧日志 |
delaycompress |
延迟一轮再压缩 |
create 0640 user group |
新建日志文件 |
copytruncate |
拷贝后清空原日志(不重命名) |
postrotate ... endscript |
轮转后执行命令(如重载服务) |
/var/log/myapp/*.log {
daily
rotate 7
missingok
notifempty
compress
delaycompress
create 0640 www-data www-data
sharedscripts
postrotate
systemctl reload myapp > /dev/null 2>&1 || true
endscript
}
保存为:
/etc/logrotate.d/myapp
/var/log/app.log {
size 50M
rotate 5
copytruncate
compress
missingok
}
logrotate -d /etc/logrotate.d/myapp
✅ 只显示将要执行的操作
logrotate -f /etc/logrotate.d/myapp
systemctl status logrotate.timer
logrotate /etc/logrotate.conf
/var/lib/logrotate/status-d 调试create 或 copytruncatepostrotate 正确 reload 服务如果你有 具体服务(nginx / tomcat / 自定义程序) 或 想按大小/时间轮转,我可以给你定制一份配置。