温馨提示×

linux syslog如何分割

小樊
49
2026-07-29 20:24:09
栏目: 智能运维

在 Linux 中,**syslog 分割(日志轮转)**通常是通过 logrotate 来完成的,而不是直接由 syslog 服务本身处理。下面分几种常见情况说明。


一、使用 logrotate 分割 syslog(最常见)

1. 查看是否已配置

大多数发行版已经默认配置好:

ls /etc/logrotate.d/

常见文件:

  • rsyslog
  • syslog
  • messages

2. 典型的 syslog 轮转配置示例

/var/log/syslog
/var/log/messages
/var/log/auth.log
{
    daily
    rotate 7
    missingok
    notifempty
    compress
    delaycompress
    postrotate
        /usr/lib/rsyslog/rsyslog-rotate 2>/dev/null || true
    endscript
}

含义说明:

参数 说明
daily 每天轮转
rotate 7 保留 7 个历史文件
compress 压缩旧日志
delaycompress 延迟一次压缩
missingok 日志不存在也不报错
notifempty 空文件不轮转
postrotate 轮转后执行命令(如重载 rsyslog)

3. 手动测试 logrotate

logrotate -vf /etc/logrotate.conf

或单独测试某个配置:

logrotate -vf /etc/logrotate.d/rsyslog

二、syslog 服务本身是否需要重启?

✅ rsyslog

轮转后通常需要让 rsyslog 重新打开文件:

systemctl restart rsyslog

或在 postrotate 中使用:

kill -HUP $(cat /var/run/rsyslogd.pid)

✅ syslog-ng

systemctl restart syslog-ng

三、按大小或时间分割(示例)

按大小(10MB)

/var/log/syslog {
    size 10M
    rotate 5
    compress
}

按小时(不常见,需 cron)

logrotate 默认最小单位是 daily,按小时需要:

  • cron + logrotate 或
  • rsyslog 模板(见下文)

四、rsyslog 按模板自动分割(高级)

rsyslog 本身也可以按时间生成文件:

$template DailyLogs,"/var/log/syslog-%$NOW%.log"
*.* ?DailyLogs

⚠️ 这种方式 不会自动清理旧日志,仍需 logrotate 配合。


五、常见问题排查

1. 日志一直不分割?

  • 检查 cron 是否运行
  • 查看 /var/lib/logrotate/status
  • 查看 /var/log/logrotate.log

2. 轮转后 syslog 不写新文件?

  • 忘记 postrotate reload
  • rsyslog 仍持有旧 fd

六、总结(推荐方案)

最佳实践

  • logrotate 做轮转
  • rsyslog / syslog-ng 只负责写日志
  • 轮转后 reload 日志服务

如果你愿意,可以告诉我:

  • 发行版(CentOS / Ubuntu / Rocky / Debian)
  • 使用的是 rsyslog 还是 syslog-ng

我可以给你一份完全可直接用的配置

0