在 Debian(以及大多数 Linux 发行版)中,日志轮转通常通过 logrotate 工具来配置。下面从基本概念 → 配置方式 → 常见示例 → 调试命令一步步说明。
/etc/logrotate.conf/etc/logrotate.d/cron / systemd timer 定期执行(通常是每天)查看是否启用:
ls -l /etc/cron.daily/logrotate
# 或
systemctl status logrotate.timer
示例(默认内容简化):
weekly
rotate 4
create
compress
include /etc/logrotate.d
含义:
weekly:每周轮转rotate 4:保留 4 个旧日志create:轮转后创建新日志文件compress:压缩旧日志在 /etc/logrotate.d/ 下新建配置文件,例如 /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 |
空日志不轮转 |
create MODE USER GROUP |
新建日志文件 |
copytruncate |
拷贝后清空原文件(不推荐用于数据库) |
postrotate ... endscript |
轮转后执行命令 |
假设日志在 /opt/app/logs/app.log:
/opt/app/logs/app.log {
size 100M
rotate 5
compress
missingok
notifempty
copytruncate
}
说明:
copytruncate 适合不能 reload 的程序logrotate -d /etc/logrotate.d/nginx
logrotate -f /etc/logrotate.d/nginx
/var/lib/logrotate/status/var/log/syslogcreate + postrotate reloadcopytruncate如果是 journalctl 日志:
journalctl --vacuum-size=100M
或修改:
/etc/systemd/journald.conf
如果你有具体服务或日志路径,我可以帮你写一份完整配置。