温馨提示×

Debian日志如何分割

小樊
43
2026-07-27 01:34:43
栏目: 智能运维

在 Debian(以及大多数 Linux 发行版)中,日志分割(轮转)通常由 logrotate 负责。下面从常见场景给你一个完整说明。


一、Debian 日志分割机制

1️⃣ 核心工具:logrotate

  • 系统自带
  • 按时间 / 大小自动切割、压缩、删除旧日志
  • 配置文件:
    • 主配置:/etc/logrotate.conf
    • 应用配置:/etc/logrotate.d/*

2️⃣ 系统日志(rsyslog / journald)

日志类型 服务 轮转方式
/var/log/syslog rsyslog logrotate
/var/log/auth.log rsyslog logrotate
journalctl systemd-journald journald 自带

二、查看现有日志分割规则

ls /etc/logrotate.d/

常见文件:

  • rsyslog
  • apt
  • dpkg
  • nginx
  • mysql

查看 rsyslog:

cat /etc/logrotate.d/rsyslog

三、常见 logrotate 配置说明

示例(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 每天轮转
weekly 每周
size 100M 超过 100M 才轮转
compress gzip 压缩
missingok 日志不存在不报错
notifempty 空日志不轮转
postrotate 轮转后执行命令(如重载服务)

四、手动测试 logrotate

1️⃣ 立即执行一次

logrotate -f /etc/logrotate.conf

2️⃣ 调试模式(不真正执行)

logrotate -d /etc/logrotate.conf

五、systemd 日志(journal)如何分割

查看 journal 占用

journalctl --disk-usage

限制 journal 大小(推荐)

编辑:

sudo nano /etc/systemd/journald.conf

常用配置:

SystemMaxUse=200M
SystemMaxFileSize=50M
MaxRetentionSec=7day

重启:

sudo systemctl restart systemd-journald

六、自定义日志分割(示例)

假设你有 /var/log/myapp.log

sudo nano /etc/logrotate.d/myapp

内容:

/var/log/myapp.log {
    daily
    rotate 14
    size 50M
    compress
    missingok
    notifempty
    create 0640 www-data www-data
    postrotate
        systemctl reload myapp
    endscript
}

七、常见问题

❓ 日志没被分割?

  • 检查 cron 是否运行:
    systemctl status cron
    
  • logrotate 由 cron 每天执行:
    /etc/cron.daily/logrotate
    

❓ 日志还在变大?

  • 服务未 reload(如 nginx、rsyslog)
  • 没加 postrotate

八、总结

✅ Debian 日志分割 主要靠 logrotate
✅ 系统日志、应用日志都适用
✅ journal 日志用 journald.conf 控制
✅ 可通过 daily / size / rotate 灵活控制

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

  • 你是 系统日志 还是 某个应用日志
  • 想按 时间 / 大小 / 保留天数

我可以帮你直接写一份可用的 logrotate 配置。

0