怎么使用 Shell 脚本监控 Apache 日志文件大小

作者:袖梨 2026-07-16
可用Shell脚本定期检查Apache日志大小并超限告警或轮转:用stat -c "%s"获取字节数,设阈值如100MB(104857600字节),超限时用logger通知或logrotate轮转,通过crontab每10分钟执行一次。

可以用 Shell 脚本定期检查 Apache 日志文件(如 access.logerror.log)的大小,当超过设定阈值时触发告警或自动轮转。关键在于准确获取文件大小、合理设置阈值,并避免频繁误报。

获取日志文件当前大小

Linux 下推荐用 statdu 获取字节数,比 ls -lh 更适合脚本解析:

  • stat -c "%s" /var/log/apache2/access.log —— 直接输出字节数(推荐)
  • du -b /var/log/apache2/access.log | awk '{print $1}' —— 兼容性更好,但略慢

注意路径需根据实际安装调整(Debian/Ubuntu 默认在 /var/log/apache2/,CentOS/RHEL 在 /var/log/httpd/)。

设定大小阈值并做判断

把阈值设为变量,单位统一用字节便于比较。例如限制单个日志不超过 100MB:

  • MAX_SIZE=$((100 * 1024 * 1024))(即 104857600 字节)
  • -gt 判断是否超限:if [ "$CURRENT_SIZE" -gt "$MAX_SIZE" ]; then ...
  • 建议预留缓冲空间,比如实际阈值设为 90MB,避免刚好卡在边界反复触发

超限时执行响应操作

不建议直接删日志,优先选择安全动作:

  • 发送通知:用 maillogger 记录系统日志,例如 logger "Apache access.log exceeds 100MB: $CURRENT_SIZE bytes"
  • 触发日志轮转:调用 logrotate 命令(前提是已配好配置):logrotate /etc/logrotate.d/apache2
  • 手动压缩归档:如 gzip -f /var/log/apache2/access.log,再生成新空文件:truncate -s 0 /var/log/apache2/access.log

加入定时任务自动运行

cron 每 10 分钟检查一次较合理(太频繁增加 I/O,太慢可能积压):

  • 编辑定时任务:crontab -e
  • 添加一行:*/10 * * * * /path/to/check_apache_log.sh >/dev/null 2>&1
  • 脚本开头加 #!/bin/bash,并确保有执行权限:chmod +x check_apache_log.sh

不复杂但容易忽略权限和路径问题,测试时先手动运行脚本确认输出和动作是否符合预期。

相关文章

精彩推荐