温馨提示×

怎么分割linux syslog

小樊
38
2026-07-02 01:10:10
栏目: 智能运维

在 Linux 中,syslog 的分割(轮转)通常由 logrotate 完成,而不是直接手动切割。下面按“常见场景 → 方法 → 示例”来说明。


一、理解 Linux syslog 的位置

不同发行版日志位置略有差异:

发行版 syslog 文件
Debian / Ubuntu /var/log/syslog
RHEL / CentOS /var/log/messages
通用 /var/log/auth.log

二、最常见的做法:使用 logrotate(推荐 ✅)

1️⃣ logrotate 是什么?

  • 自动按 时间 / 大小 分割日志
  • 支持:
    • 压缩(gzip)
    • 保留份数
    • 是否重启服务
  • 系统默认已在运行

2️⃣ syslog 的 logrotate 配置路径

系统 配置文件
通用 /etc/logrotate.conf
细分规则 /etc/logrotate.d/
syslog 通常在 /etc/logrotate.d/rsyslog/etc/logrotate.d/syslog

3️⃣ 常见 rsyslog logrotate 示例

/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        # 压缩旧日志
notifempty      # 空日志不轮转
postrotate      # 轮转后重新加载 rsyslog

三、手动分割 syslog(不推荐长期使用)

如果你临时需要:

sudo mv /var/log/syslog /var/log/syslog.1
sudo systemctl restart rsyslog

⚠️ 注意:

  • 不通知 syslog 服务可能导致日志继续写入旧文件
  • 不会自动压缩、不会自动清理

四、按大小切割(logrotate 配置示例)

例如:超过 100MB 就轮转

/var/log/syslog {
    size 100M
    rotate 5
    compress
    missingok
    notifempty
    postrotate
        systemctl restart rsyslog
    endscript
}

五、立即测试 logrotate 是否生效

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

查看是否生成:

ls -lh /var/log/syslog*

六、journalctl(systemd 日志)的“分割”

如果是 systemd-journal

# 查看日志大小
journalctl --disk-usage

# 限制大小
journalctl --vacuum-size=100M

配置文件:

/etc/systemd/journald.conf

七、常见问题

❓ 日志轮转了但还在变大?

  • 忘记 postrotate 重新加载 syslog
  • 程序仍持有旧文件句柄

❓ 日志消失了?

  • rotate 设置太小
  • missingok + 路径错误

八、我可以帮你

你可以补充:

  • ✅ Linux 发行版
  • ✅ 是否使用 rsyslog / syslog-ng / systemd-journal
  • ✅ 想按 时间 还是 大小 分割

我可以直接给你一份 可直接复制粘贴的 logrotate 配置

0