温馨提示×

ubuntu apache日志怎么切割

小樊
47
2026-09-06 16:14:59
栏目: 智能运维

在 Ubuntu 上,Apache 日志切割最常用、最推荐的方式是使用 logrotate(系统自带),而不是手动写脚本。下面按常见需求给你几种做法。


一、使用 logrotate(推荐 ✅)

Ubuntu 默认已经为 Apache 配置好了 logrotate。

1. 查看 Apache 的 logrotate 配置

cat /etc/logrotate.d/apache2

典型内容类似:

/var/log/apache2/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 640 root adm
    sharedscripts
    postrotate
        systemctl reload apache2 > /dev/null 2>&1 || true
    endscript
}

2. 常用参数说明

  • daily:每天切割(也可 weekly / monthly)
  • rotate 14:保留 14 个旧日志
  • compress:压缩旧日志
  • missingok:日志不存在也不报错
  • notifempty:空日志不切割
  • postrotate:切割后让 Apache 重新打开日志

二、修改切割频率(示例)

每天切割,保留 30 天

编辑:

sudo nano /etc/logrotate.d/apache2

修改为:

/var/log/apache2/*.log {
    daily
    rotate 30
    compress
    delaycompress
    missingok
    notifempty
    create 640 root adm
    sharedscripts
    postrotate
        systemctl reload apache2 > /dev/null 2>&1 || true
    endscript
}

三、只切割 access.log 或 error.log

例如只切 access.log:

/var/log/apache2/access.log {
    daily
    rotate 30
    compress
    missingok
    notifempty
    create 640 root adm
    postrotate
        systemctl reload apache2 > /dev/null 2>&1 || true
    endscript
}

四、手动测试 logrotate(不真正执行)

sudo logrotate -d /etc/logrotate.d/apache2

强制立即执行:

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

五、Apache 自带 rotatelogs(不推荐但可用)

修改虚拟主机配置:

CustomLog "|/usr/bin/rotatelogs /var/log/apache2/access_%Y%m%d.log 86400" combined
  • 86400 = 每天
  • 需要重启 Apache

⚠️ 缺点:不好统一压缩、管理混乱


六、常见问题

日志没切割?

  • 检查 cron 是否运行:
    systemctl status cron
    
  • 手动执行一次:
    sudo logrotate -f /etc/logrotate.d/apache2
    

切割后 Apache 不写新日志?

  • 一定要 reload apache2,不要 restart

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

  • Apache 版本(2.4?)
  • 日志路径
  • 想每天 / 每周 / 按大小切割

我可以直接帮你写一份完整配置。

0 踩