在 Ubuntu 上,Apache 日志切割常见做法有 3 种:logrotate(推荐)、cronolog、自定义脚本。下面按使用频率和推荐程度说明。
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
endscript
}
daily / weekly / monthly:切割周期rotate N:保留 N 个旧日志compress:压缩旧日志size 100M:超过大小就切postrotate:切完后重启 Apache 日志句柄logrotate -d /etc/logrotate.d/apache2 # 模拟
logrotate -f /etc/logrotate.d/apache2 # 强制执行
适合按天/小时生成新文件。
sudo apt install cronolog
编辑:
/etc/apache2/sites-enabled/000-default.conf
示例:
CustomLog "|/usr/bin/cronolog /var/log/apache2/access_%Y%m%d.log" combined
ErrorLog "|/usr/bin/cronolog /var/log/apache2/error_%Y%m%d.log"
sudo systemctl restart apache2
✅ 优点:日志文件名带日期
❌ 缺点:不会自动压缩
示例(按天切割):
#!/bin/bash
DATE=$(date -d yesterday +%Y%m%d)
mv /var/log/apache2/access.log /var/log/apache2/access_$DATE.log
systemctl reload apache2
加入 cron:
0 0 * * * /usr/local/bin/cut_apache_log.sh
reload apache2/var 小分区如果你愿意,可以告诉我:
我可以帮你写可直接用的配置。