apache日志目录跑满后应通过符号链接无缝切换至新挂载点,不中断写入、保留历史可追溯性,并同步更新logrotate配置管理新路径,最后验证写入与磁盘占用。

Apache 日志目录跑满磁盘后,不能直接清空或硬重启,否则可能丢失关键排查信息、中断服务写入,甚至触发 SELinux 或 systemd 保护机制导致 httpd 启动失败。平滑迁移的核心是:**不中断日志写入、保留历史可追溯性、让新路径被 Apache 自动接管**。
确认当前日志路径与写入进程
先查清实际日志位置和正在写入的进程:
- Ubuntu/Debian 默认日志路径:
/var/log/apache2/access.log和/var/log/apache2/error.log - RHEL/CentOS 默认路径:
/var/log/httpd/access_log和/var/log/httpd/error_log - 运行
sudo lsof +D /var/log/apache2(或对应路径),确认是否有 httpd 进程仍持有旧日志文件句柄 - 检查
ps aux | grep httpd,确保主进程和子进程都处于运行状态——迁移全程无需停止服务
切换日志写入到新挂载点
推荐用符号链接方式实现无缝切换,避免修改 Apache 配置或重启:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 新建一个足够大的分区(如
/data/logs),格式化并挂载(例如mount /dev/vdd1 /data/logs) - 把原日志目录内容完整复制过去:
sudo rsync -av --delete /var/log/apache2/ /data/logs/apache2/ - 重命名原目录并创建软链:
sudo mv /var/log/apache2 /var/log/apache2-old && sudo ln -s /data/logs/apache2 /var/log/apache2 - Apache 会自动继续向软链目标写入,旧进程无需 reload 即可生效
同步启用 Logrotate 管理新路径
仅迁移目录不够,必须让 logrotate 跟进新路径,否则很快再次撑满:
- 编辑
/etc/logrotate.d/apache2(或httpd),将日志路径改为/data/logs/apache2/*.log - 保持关键参数:如
daily、rotate 7、compress、create 644 www-data adm(Ubuntu)或root root(RHEL) - 添加
postrotate ... endscript块,确保 reload 指令指向正确的 service 名(如systemctl reload apache2) - 手动测试:
sudo logrotate -vf /etc/logrotate.d/apache2,观察是否在/data/logs/apache2下生成压缩归档
清理与验证双保险
旧日志目录(/var/log/apache2-old)暂时保留,但需控制其占用:
- 立即压缩归档:
sudo tar -czf /tmp/apache2-old-$(date +%F).tar.gz -C /var/log apache2-old - 校验新路径写入是否正常:访问网站后,执行
tail -n 1 /data/logs/apache2/access.log,确认有最新请求记录 - 检查磁盘使用:
df -h /data和df -h /var,确认 /var 不再增长,/data 开始承载日志流量 - 一周后确认无异常,再安全删除
/var/log/apache2-old










