在 Debian 中,**日志轮转(log rotation)**通常是通过 logrotate 工具来完成的。下面从原理、配置、常见用法三个方面说明。
logrotate/etc/logrotate.conf/etc/logrotate.d/执行流程:
cron / systemd-timer
↓
/usr/sbin/logrotate /etc/logrotate.conf
↓
按配置轮转日志
dpkg -l | grep logrotate
systemctl status logrotate.timer
手动执行一次(调试很有用):
logrotate -d /etc/logrotate.conf # 模拟执行
logrotate -f /etc/logrotate.conf # 强制执行
/etc/logrotate.conf 中通常包含:
weekly
rotate 4
create
include /etc/logrotate.d
含义:
weekly:每周轮转rotate 4:保留 4 个旧日志create:轮转后创建新日志文件例如你有一个应用日志:/var/log/myapp.log
创建配置文件:
vim /etc/logrotate.d/myapp
内容示例:
/var/log/myapp.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
systemctl reload myapp > /dev/null 2>&1 || true
endscript
}
参数说明:
| 参数 | 作用 |
|---|---|
| daily | 每天轮转 |
| rotate 7 | 保留 7 份 |
| compress | 压缩旧日志 |
| delaycompress | 延迟一次压缩 |
| notifempty | 空文件不轮转 |
| create | 创建新文件 |
| postrotate | 轮转后执行命令(如重载服务) |
size 100M
超过 100MB 就轮转(不依赖时间)
daily
size 50M
nocompress
dateext
dateformat -%Y%m%d
生成示例:
myapp.log-20260121
如果你用的是 systemd,日志由 journald 管理,不走 logrotate:
查看:
journalctl
配置:
vim /etc/systemd/journald.conf
常用参数:
Storage=persistent
SystemMaxUse=500M
MaxRetentionSec=2week
重启生效:
systemctl restart systemd-journald
logrotate -d /etc/logrotate.d/myapp
cat /var/lib/logrotate/status
如果你有具体日志路径 / 服务类型(nginx、自定义程序、docker 等),我可以帮你写一份可直接用的配置。