温馨提示×

Debian日志轮转怎么设

小樊
39
2026-09-16 11:49:01
栏目: 智能运维

在 Debian 里,“日志轮转”通常说的是 logrotate。下面按“怎么看 → 怎么改 → 怎么自定义 → 常见问题”来说。


一、logrotate 基本概念

Debian 默认已经装好并启用:

which logrotate
# /usr/sbin/logrotate

系统通过 cron / systemd timer 每天执行一次:

ls /etc/cron.daily/logrotate
systemctl status logrotate.timer

主配置文件:

/etc/logrotate.conf

子配置目录(常用):

/etc/logrotate.d/

二、最简单的修改方式(推荐)

给某个服务单独建一个配置文件,比如 Nginx:

sudo vim /etc/logrotate.d/nginx

示例:

/var/log/nginx/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 0640 www-data adm
    sharedscripts
    postrotate
        systemctl reload nginx >/dev/null 2>&1
    endscript
}

三、常用参数说明

参数 含义
daily / weekly / monthly 轮转频率
rotate N 保留 N 个旧日志
compress 压缩旧日志
delaycompress 下次轮转再压缩(避免正在写入)
missingok 日志不存在也不报错
notifempty 空日志不轮转
copytruncate 拷贝后截断(不重启服务)
create 新建日志文件
size 100M 超过大小就轮转
postrotate ... endscript 轮转后执行命令

四、不想改系统配置?用 size 触发更实用

例如:

/var/log/myapp.log {
    size 50M
    rotate 5
    compress
    copytruncate
}

五、手动测试(很重要)

1️⃣ 测试配置是否正确

sudo logrotate -d /etc/logrotate.d/nginx

(-d = debug,不真正执行)

2️⃣ 强行执行一次

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

六、systemd 服务日志(journald)

如果你的日志是 journalctl:

sudo vim /etc/systemd/journald.conf

常用:

SystemMaxUse=500M
MaxRetentionSec=2week

然后:

sudo systemctl restart systemd-journald

七、常见坑

❌ 日志不轮转
→ 检查 cron / timer 是否运行

❌ 服务写不进新日志
→ 用 create 或 copytruncate

❌ 权限错误
→ 注意 create 后的用户组


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

  • 是 系统日志 / Nginx / 自定义程序
  • 想按 时间还是大小
  • 是否允许 重启服务

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

0 踩