在 Debian 系统中,日志滚动(Log Rotation)主要由 logrotate 工具完成。下面从 原理、配置、常见示例、手动测试 几个方面说明。
.log.1).log.2.gz)检查是否安装:
dpkg -l logrotate
/etc/logrotate.conf
主要控制全局策略,例如:
weekly
rotate 4
create
compress
include /etc/logrotate.d
/etc/logrotate.d/
每个服务一个文件,如:
/etc/logrotate.d/nginx
/etc/logrotate.d/rsyslog
/var/log/myapp.log {
daily
rotate 7
compress
missingok
notifempty
create 0640 www-data www-data
postrotate
systemctl reload myapp > /dev/null 2>&1 || true
endscript
}
说明:
| 参数 | 含义 |
|---|---|
| daily | 每天滚动 |
| rotate 7 | 保留 7 个历史文件 |
| compress | 压缩旧日志 |
| missingok | 文件不存在也不报错 |
| notifempty | 空文件不滚动 |
| create | 创建新日志文件 |
| postrotate | 滚动后执行(如重加载服务) |
/var/log/syslog
/var/log/auth.log
{
rotate 7
daily
missingok
notifempty
compress
delaycompress
postrotate
/usr/lib/rsyslog/rsyslog-rotate 2>/dev/null || true
endscript
}
Debian 默认已配置好,一般不需要修改。
/var/log/big.log {
size 100M
rotate 5
compress
missingok
notifempty
}
logrotate -d /etc/logrotate.conf
logrotate -vf /etc/logrotate.conf
systemctl status logrotate.timer
systemctl enable logrotate.timer
/etc/cron.daily/logrotate
cat /var/lib/logrotate/status
原因:程序没重新打开日志文件
✅ 解决:使用 postrotate 重新加载服务
systemd-journald 的日志 不是 logrotate 管理,而是:
journalctl --vacuum-size=100M
journalctl --vacuum-time=7d
配置文件:
/etc/systemd/journald.conf
✅ Debian 日志滚动核心工具:logrotate
✅ 配置位置:/etc/logrotate.conf + /etc/logrotate.d/
✅ 可执行 logrotate -vf 手动测试
✅ systemd 日志用 journalctl 管理
如果你有 某个具体服务(Nginx / Docker / 自定义程序) 的日志,我可以帮你写一份专用 logrotate 配置。