在 Debian 里,“日志轮转”通常说的是 logrotate。下面按“怎么看 → 怎么改 → 怎么自定义 → 常见问题”来说。
Debian 默认已经装好并启用:
which logrotate
# /usr/sbin/logrotate
系统通过 cron / systemd timer 每天执行一次:
ls /etc/cron.daily/logrotate
systemctl status logrotate.timer
主配置文件:
/etc/logrotate.conf
子配置目录(常用):
/etc/logrotate.d/
给某个服务单独建一个配置文件,比如 Nginx:
sudo vim /etc/logrotate.d/nginx
示例:
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
systemctl reload nginx >/dev/null 2>&1
endscript
}
| 参数 | 含义 |
|---|---|
daily / weekly / monthly |
轮转频率 |
rotate N |
保留 N 个旧日志 |
compress |
压缩旧日志 |
delaycompress |
下次轮转再压缩(避免正在写入) |
missingok |
日志不存在也不报错 |
notifempty |
空日志不轮转 |
copytruncate |
拷贝后截断(不重启服务) |
create |
新建日志文件 |
size 100M |
超过大小就轮转 |
postrotate ... endscript |
轮转后执行命令 |
例如:
/var/log/myapp.log {
size 50M
rotate 5
compress
copytruncate
}
sudo logrotate -d /etc/logrotate.d/nginx
(-d = debug,不真正执行)
sudo logrotate -f /etc/logrotate.d/nginx
如果你的日志是 journalctl:
sudo vim /etc/systemd/journald.conf
常用:
SystemMaxUse=500M
MaxRetentionSec=2week
然后:
sudo systemctl restart systemd-journald
❌ 日志不轮转
→ 检查 cron / timer 是否运行
❌ 服务写不进新日志
→ 用 create 或 copytruncate
❌ 权限错误
→ 注意 create 后的用户组
如果你愿意,可以告诉我:
我可以直接帮你写一份可用的配置。