在 Ubuntu 上,Apache 日志切割最常用、最推荐的方式是使用 logrotate(系统自带),而不是手动写脚本。下面按常见需求给你几种做法。
Ubuntu 默认已经为 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
}
daily:每天切割(也可 weekly / monthly)rotate 14:保留 14 个旧日志compress:压缩旧日志missingok:日志不存在也不报错notifempty:空日志不切割postrotate:切割后让 Apache 重新打开日志编辑:
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:
/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
}
sudo logrotate -d /etc/logrotate.d/apache2
强制立即执行:
sudo logrotate -f /etc/logrotate.d/apache2
修改虚拟主机配置:
CustomLog "|/usr/bin/rotatelogs /var/log/apache2/access_%Y%m%d.log 86400" combined
86400 = 每天⚠️ 缺点:不好统一压缩、管理混乱
systemctl status cron
sudo logrotate -f /etc/logrotate.d/apache2
reload apache2,不要 restart如果你愿意,可以告诉我:
我可以直接帮你写一份完整配置。