在 Debian 系统中,**日志轮转(log rotation)**主要由 logrotate 工具完成。下面从原理、配置、常用参数和排错几个方面说明。
logrotate/etc/logrotate.conf/etc/logrotate.d/cron 或 systemd timer 定期触发Debian 默认每天执行一次日志轮转检查。
ls /etc/cron.daily/logrotate
systemctl status logrotate.timer
如果启用,会看到类似:
Loaded: loaded
Active: active (waiting)
/etc/logrotate.conf(全局配置)weekly # 默认每周轮转
rotate 4 # 保留 4 个旧日志
create # 轮转后创建新日志文件
compress # 压缩旧日志
include /etc/logrotate.d
cat /etc/logrotate.d/nginx
常见内容:
/var/log/nginx/*.log {
daily
missingok
rotate 7
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 |
使用 gzip 压缩 |
delaycompress |
延迟一次压缩 |
missingok |
日志不存在不报错 |
notifempty |
空日志不轮转 |
create 0640 user group |
新建日志权限 |
postrotate / endscript |
轮转后执行命令 |
copytruncate |
复制后清空(不重启服务) |
logrotate -vf /etc/logrotate.conf
logrotate -vf /etc/logrotate.d/nginx
cat /var/lib/logrotate/status
或:
logrotate -v /etc/logrotate.conf
/var/lib/logrotate/status/var/log/syslog 或 journalctl -u logrotate确保:
chown root:root /etc/logrotate.d/*
chmod 644 /etc/logrotate.d/*
假设你有 /var/log/myapp.log:
/var/log/myapp.log {
daily
rotate 30
compress
missingok
notifempty
create 0640 myuser mygroup
}
如果你愿意,可以告诉我:
我可以给你更精确的配置示例。