Apache二进制安装默认不启用logrotate且无预置配置,需手动配置:方案一用自带rotatelogs(管道日志,按天或大小轮转);方案二用系统logrotate(需postrotate执行apachectl graceful);方案三用cronolog(需单独安装,命名更灵活)。

Apache 二进制安装(即非系统包管理器安装,如从官网下载 httpd-*.tar.gz 编译安装或直接解压二进制包)默认不启用 logrotate,也不会自动生成 /etc/logrotate.d/ 下的配置文件。日志轮转需手动配置,核心思路是:**用外部工具接管日志文件管理,或启用 Apache 自带的管道日志机制**。
确认当前日志写入方式
先检查你的 Apache 配置中 ErrorLog 和 CustomLog 指令是否直接指向文件路径(如 /usr/local/apache2/logs/error_log),还是已使用管道(|)调用外部程序。只有前者才需要额外配置轮转;后者可直接控制轮转逻辑。
- 运行
grep -E "^(ErrorLog|CustomLog)" /usr/local/apache2/conf/httpd.conf - 若输出类似
ErrorLog "/usr/local/apache2/logs/error_log",说明是普通文件写入,需引入轮转机制 - 若看到
ErrorLog "|/path/to/rotatelogs ..."或"|/usr/bin/cronolog ...",则轮转已由该工具负责,只需调整其参数
方案一:用 rotatelogs(Apache 自带,推荐)
rotatelogs 通常随 Apache 二进制包一同提供(位于 bin/ 目录下),无需额外安装。修改 httpd.conf 中的日志指令即可实现按时间或大小切分:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 按天轮转(推荐初用):
ErrorLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/error_%Y%m%d.log 86400"<br> CustomLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/access_%Y%m%d.log 86400" combined
- 按大小轮转(例如每 100MB 新建一个):
CustomLog "|/usr/local/apache2/bin/rotatelogs /usr/local/apache2/logs/access_%Y%m%d_%H%M.log 104857600" combined - 注意:
-l参数让时间基于本地时区(非 UTC),避免日志日期错位
方案二:用 logrotate(系统级统一管理)
即使二进制安装,也可复用系统 logrotate。需手动创建配置文件并确保 Apache 在轮转后重载日志句柄:
- 新建配置:
sudo tee /etc/logrotate.d/httpd-bin > /dev/null <<'EOF'<br> /usr/local/apache2/logs/*.log {<br> daily<br> missingok<br> rotate 7<br> compress<br> delaycompress<br> notifempty<br> create 640 root root<br> sharedscripts<br> postrotate<br> if /usr/local/apache2/bin/apachectl status > /dev/null 2>&1; then<br> /usr/local/apache2/bin/apachectl graceful 2>/dev/null || true<br> fi<br> endscript<br> }<br> EOF - 关键点:
– 日志路径必须与httpd.conf中实际路径一致
–apachectl graceful发送 USR1 信号,让 Apache 关闭旧日志文件、打开新文件
– 属主/属组设为root root(因二进制安装通常无adm组)
方案三:用 cronolog(需单独安装)
若偏好更灵活的命名规则(如含小时、毫秒),可选用 cronolog:
- 安装(Ubuntu/Debian):
sudo apt-get install cronolog
CentOS/RHEL:sudo yum install cronolog或从源码编译 - 配置示例:
ErrorLog "|/usr/bin/cronolog /usr/local/apache2/logs/error_%Y-%m-%d.log"<br> CustomLog "|/usr/bin/cronolog /usr/local/apache2/logs/access_%Y-%m-%d_%H.log" combined
- 优势:支持任意格式化字符串,适合按小时归档分析
改完配置后,务必重启 Apache:/usr/local/apache2/bin/apachectl restart,并检查新日志是否生成、旧文件是否按预期切分。不需要重启服务就能生效的轮转方式,只适用于管道日志(rotatelogs/cronolog);logrotate 方式依赖 postrotate 脚本中的 graceful 操作。

















