温馨提示×

Debian syslog如何轮转

小樊
52
2026-07-07 20:47:22
栏目: 智能运维

在 Debian 系统中,syslog 日志轮转主要是通过 rsyslog + logrotate 来完成的。下面分情况说明怎么配置和生效。


一、Debian 中 syslog 日志轮转机制

1. 涉及组件

  • rsyslog:负责收集、写入日志(如 /var/log/syslog
  • logrotate:负责定期轮转、压缩、删除旧日志
  • cron:每天触发 logrotate

二、查看 syslog 轮转配置

Debian 默认已经有 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:压缩旧日志(.gz
  • delaycompress:延迟一次压缩
  • postrotate:轮转后重新加载 rsyslog,避免继续写旧文件

三、立即手动轮转 syslog(测试)

sudo logrotate -f /etc/logrotate.d/rsyslog

查看结果:

ls -lh /var/log/syslog*

你可能会看到:

/var/log/syslog
/var/log/syslog.1
/var/log/syslog.2.gz

四、调整 syslog 轮转策略(常见需求)

1. 保留更长时间(例如 30 天)

sudo nano /etc/logrotate.d/rsyslog

修改:

rotate 30

2. 按大小轮转(例如超过 100MB)

size 100M

注意:

  • 如果同时有 dailysizesize 优先生效

3. 不压缩旧日志(调试方便)

删除或注释:

# compress
# delaycompress

五、确认 logrotate 是否正常运行

1. 查看 cron 任务

cat /etc/cron.daily/logrotate

2. 查看 logrotate 状态

cat /var/lib/logrotate/status

3. 手动调试执行

sudo logrotate -d /etc/logrotate.conf

-d 是调试模式,不会真正执行)


六、rsyslog 是否需要重启?

不需要手动重启
logrotate 配置中一般包含:

postrotate
    /usr/lib/rsyslog/rsyslog-rotate
endscript

或者传统写法:

postrotate
    systemctl kill -s HUP rsyslog
endscript

这会让 rsyslog 重新打开日志文件。


七、其他常见 syslog 文件轮转

如果你还看到这些日志,它们通常也在同一个文件中一起轮转:

/var/log/auth.log
/var/log/mail.log
/var/log/kern.log
/var/log/daemon.log

八、常见问题

1. 日志一直不轮转?

  • 检查 cron 是否运行
  • 检查 /etc/logrotate.d/rsyslog 是否存在
  • 查看是否有语法错误

2. 磁盘满但日志没轮转?

df -h
du -sh /var/log/*

可能是:

  • 轮转频率太低
  • 未限制日志大小
  • 有其他服务写入同一分区

如果你愿意,我可以:

  • ✅ 帮你定制一套 生产环境 syslog 轮转配置
  • ✅ 排查 日志不轮转的真实原因
  • ✅ 教你 systemd + journald 的轮转方式

直接告诉我你的 Debian 版本和使用场景即可。

0