在 Debian 系统中,**syslog 日志分割(轮转)**通常是通过 rsyslog + logrotate 来完成的。下面分情况说明如何配置和生效。
rsysloglogrotate/etc/rsyslog.conf、/etc/rsyslog.d/*.conf/etc/logrotate.conf、/etc/logrotate.d/Debian 已经默认对 /var/log/syslog 等日志做了轮转,一般不需要手动干预。
cat /etc/logrotate.d/rsyslog
常见内容示例:
/var/log/syslog
{
rotate 7
daily
missingok
notifempty
delaycompress
compress
postrotate
/usr/lib/rsyslog/rsyslog-rotate 2>/dev/null || true
endscript
}
含义:
rotate 7:保留 7 个历史文件daily:每天轮转compress:压缩旧日志postrotate:轮转后通知 rsyslog 重新打开日志文件/var/log/syslog
{
size 100M
rotate 10
missingok
notifempty
compress
postrotate
/usr/lib/rsyslog/rsyslog-rotate 2>/dev/null || true
endscript
}
⚠️ 注意:
size和daily不建议同时使用
/var/log/syslog
{
weekly
rotate 12
compress
missingok
notifempty
postrotate
/usr/lib/rsyslog/rsyslog-rotate 2>/dev/null || true
endscript
}
logrotate -d /etc/logrotate.d/rsyslog
-d:调试模式,不真正执行强制执行一次:
logrotate -f /etc/logrotate.d/rsyslog
不需要手动重启,前提是 postrotate 正确执行了 rsyslog-rotate 或:
systemctl kill -s HUP rsyslog
否则 rsyslog 会继续写旧文件。
Debian 10 以后使用:
/usr/lib/rsyslog/rsyslog-rotate
该脚本会自动处理:
检查:
systemctl status cron
systemctl status rsyslog
logrotate 依赖 cron 或 cron.daily
size 却没有触发例如 /var/log/myapp.log:
/etc/logrotate.d/myapp
/var/log/myapp.log
{
daily
rotate 7
compress
missingok
notifempty
postrotate
systemctl reload rsyslog
endscript
}
✅ Debian syslog 分割核心:
如果你愿意,可以告诉我:
我可以给你一份完全定制的 logrotate 配置。