在 Linux 中,**syslog 日志轮转(rotate)**通常由 logrotate 工具来完成。下面按常见场景说明配置和使用方法。
/var/log/messages、/var/log/syslog)✅ 大多数发行版已经默认配置好 syslog 的轮转规则。
| 发行版 | 主要 syslog 文件 |
|---|---|
| RHEL / CentOS | /var/log/messages |
| Debian / Ubuntu | /var/log/syslog |
| 通用 | /var/log/auth.log、/var/log/kern.log |
/etc/logrotate.conf
/etc/logrotate.d/syslog
# 或
/etc/logrotate.d/rsyslog
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron {
sharedscripts
rotate 7
daily
missingok
notifempty
compress
delaycompress
postrotate
/bin/systemctl kill -s HUP rsyslog.service >/dev/null 2>&1 || true
endscript
}
/var/log/syslog
/var/log/auth.log
/var/log/kern.log {
rotate 7
daily
missingok
notifempty
compress
delaycompress
postrotate
/usr/lib/rsyslog/rsyslog-rotate 2>/dev/null || true
endscript
}
| 参数 | 作用 |
|---|---|
rotate 7 |
保留 7 个旧日志 |
daily |
每天轮转 |
weekly |
每周轮转 |
size 100M |
超过 100M 就轮转 |
compress |
gzip 压缩 |
delaycompress |
延迟一轮再压缩 |
missingok |
日志不存在不报错 |
notifempty |
空文件不轮转 |
postrotate |
轮转后执行(通知 syslog 重新打开文件) |
⚠️ 非常重要:
syslog 必须重新打开日志文件,否则仍会写旧文件。
logrotate -f /etc/logrotate.d/syslog
或:
logrotate -vf /etc/logrotate.conf
ls -lh /var/log/syslog*
应看到类似:
syslog
syslog.1
syslog.2.gz
systemctl status cron # Debian
systemctl status crond # RHEL
postrotate 脚本是否正确lsof | grep deleted
Linux syslog 日志轮转由 logrotate 完成,关键是配置好轮转策略并在 postrotate 中通知 rsyslog 重新打开日志文件。
如果你愿意,可以告诉我:
rsyslog / syslog-ng我可以给你一份完全适配你系统的配置。